Let’s Encrypt 免費 SSL cert

By | September 1, 2016

一向 SSL cert 是有錢人的玩意,找間有名的 CA 簽發,一個 domain 往往要數千甚至上萬港元一年,莫講話個人,好多中小企都負擔唔起,這不單阻礙了網絡安全的發展,更阻礙了 SPDY (HTTP/2) 的推廣。情況可能被 Let’s Encrypt 打破,她提供了免費 SSL cert 簽發服務,簽出來的 cert 在 IE11、Edge、Safari、Firefox、Chrome、Android、iOS 都被認可。這實在是網絡發展一大進步。

要 Let’s Encrypt 簽署,你可以用 Certbot,而使用 Certbot 最簡單的方法就是使用 Docker。Docker 已成了最簡單 deployment 的方法,比 RPM、DEB 更方便!

首先 pull 個 image 下來本機
$ docker pull quay.io/letsencrypt/letsencrypt:latest

之後建立本機資料夾用來存方簽好的 cert、key、config 等檔案
$ sudo mkdir /var/lib/letsencrypt /etc/letsencrypt

再起動 docker container
$ docker run -it --rm -p 443:443 -p 80:80 --name certbot -v /etc/letsencrypt:/etc/letsencrypt -v /var/lib/letsencrypt:/var/lib/letsencrypt quay.io/letsencrypt/letsencrypt:latest certonly

由於要得到 Let’s Encrypt 認證 domain,Firewall 要打開 port 80 及 443,以及不能佔用以上兩個 ports,此時要關閉 web server。

Container 起動後,跟 screen 指示,便可在本機 /etc/letsencrypt/archive/ 得到以下 files:

  • cert1.pem
  • chain1.pem
  • fullchain1.pem
  • privkey1.pem
  • 把 cert1.pem、chain1.pem、privkey1.pem copy 去 Apache HTTP server 的 conf/,把以下 files 重新名命:

    mv cert1.pem server.crt
    mv chain1.pem server-ca.crt
    mv privkey1.pem server.key

    更改 Apache conf/extra/httpd-ssl.conf,確保有以下幾行:

    SSLCertificateFile conf/server.crt
    SSLCertificateKeyFile conf/server.key
    SSLCertificateChainFile conf/server-ca.crt

    最後確保 httpd-ssl.conf 有被 include 在 conf/httpd.conf 及重啟 Apache HTTP server 便可。

    $ sudo systemctl restart httpd

    如需不同 domain 用 SSL,那在 conf/extra/httpd-vhosts.conf 做改動便可。