Let’s Encrypt with Docker

Bibby Chung
my-coding-life
Published in
5 min readMar 22, 2018

Let’s Encrypt 這個數位憑證認證機構從 2015 年就提供了免費的憑證,在這之前如果要有憑證,每年都要準備不少的錢,現在有了這個服務,可以讓你網站免費開始使用 HTTPS (Hypertext Transfer Protocol Secure) 的安全方式提供服務,當您有了 HTTPS 後,順道也可以開始支援 HTTP/2 的協議,這樣一舉多得的「改變」,趕快開始使用吧!

首先如果你在網路上搜尋 Let’s Encrypt 這申請教學,網路上有蠻多的教學都是用 https://www.sslforfree.com 這個網站去申請,但是憑證這東西經過別人的網站,就是感覺有點不保險…今天會用 docker 來申請,會使用 docker 的原因是,我不想讓我的 server 髒掉,裝一堆跟 server 無關的東西,過程只需要幾個指令就好了,跟著步驟做,一切就順順利利的啦!

首先到你的 host 主機,先把 docker 裝起來,這裡我就不教你怎麼裝 docker 了,參考一下 docker 的官網,首先把 container 跑起來

docker run -p 80:80 -it --rm ubuntu /bin/bash

這裡開放 port 出來是為了等等方便 Let's Encrypt 來驗證你的主機

這段是要更新 container 還有把等等要用到的套件裝一裝

apt-get update && apt-get install gcc libffi-dev python-dev git npm nodejs vim

這裡建立驗證憑證網域憑這的目錄

mkdir -p /app/.well-known/acme-challenge

這裡使用 github 上的 letsencrypt 提供的程式來申請驗證,首先去 github 上下載下來

cd /usr/share && git clone https://github.com/letsencrypt/letsencrypt letsencrypt

然後執行

cd /usr/share/letsencrypt && ./letsencrypt-auto certonly --webroot -d <YOUR DOMAIN>

執行時候會問你幾個問題「註冊人的 email」「是否同意它的規範」「是否公開您的 email」…有一個比較重要的

Input the webroot for test0.idea8.biz: (Enter ‘c’ to cancel):

這這是要叫填入驗證主機的根目錄,這裡要填剛剛建立的 “/app”,不要填錯,填錯就認證不到了(你<YOUR DOMAIN> 的 ip 記得指向你的主機喔!)

接下來你會看到類似下列這網址

http://<YOUR DOMAIN>/.well-known/acme-challenge/OtWEP7A0AT1EKOgrn3i5NeKADCWpvKZgUyY0_thggqY

這就是 Let's Encrypt 來驗證這網域是不是你的

接下來我們就產生一個剛剛那段網址的 file 讓 Let's Encrypt 驗證

vi /app/.well-known/acme-challenge/OtWEP7A0AT1EKOgrn3i5NeKADCWpvKZgUyY0_thggqY

直接存檔就可以了(vim 不會存檔的人,去 google 一下 XD)

接下來裝一個簡單的 web server 來讓 Let's Encrypt 來驗證剛剛產出來的檔案

ln -s /usr/bin/nodejs /usr/bin/node && npm install -g http-server forever

然後把 web server 跑起來

forever start -c http-server /app -p 80

接著再執行一次

cd /usr/share/letsencrypt && ./letsencrypt-auto certonly --webroot -d <YOUR DOMAIN>

然後你就可以看到下列這兩個類似連結

/etc/letsencrypt/live/<YOUR DOMAIN>/fullchain.pem
/etc/letsencrypt/live/<YOUR DOMAIN>/privkey.pem

這樣就表示成功了

接下來就只需要把檔案載回來就可以了,這裡用點小撇步來下載檔案,就是利用剛剛的 http-server 來方便下載

forever stop 0 && forever start -c http-server /etc/letsencrypt/live -p 80

這樣你打上申請網域的連結就可以看到檔案了 http://<YOUR DOMAIN>/

下載這些檔案,就可以去設定你服務的 HTTPS 了...

Enjoy it….

Reference:
https://letsencrypt.org/
https://github.com/certbot/certbot

--

--