2016/8/22

Lets Encrypt SSL Key 申請與更新

Let's Encrypt是由EFF、Mozilla基金會、Akamai和Cisco等等許多大公司及非營利組織於2014年共同創立的ISRG組織所成立的數位憑證認證機構,目標是讓提供免費申請並自動更新的憑證服務,推廣及加速全球網站採用HTTPS安全的加密傳輸協定。


Let's Encrypt已在2016年4月正式進入穩定階段,原本在舊版 windows xp 的相容性問題也解決了,需要注意的是,Let's Encrypt簽發的憑證有效期為3個月(90天),也就是說網站每3個月都需要重新更新一次憑證,但我們可以透過 renew script 來定期更新憑證。


ACME (Automated Certificate Management Environment) protocol


在 Let's Encrypt 的 How It Works 有說明實作的原理,是使用了 ACME (Automated Certificate Management Environment) Protocol,但是 Let's Encrypt 實作的是自己的 Automated Certificate Management Environment (ACME),實際上在 IETF 有另一個 ACME spec: IETF ACME,Let's Encrypt 規格文件中並不保證能夠影響 IETF ACME,Let's Encrypt 應該是為了在市場驗證才先提供這樣的服務,未來在 IETF ACME 標準化之後,或許可能會經歷一段相容性的過渡期。


Let's Encrypt 在去年 beta 時還是以 letsencrypt script 提供申請與更新的服務,今年就改以 EFF certbot release 正式版。


certbot


要安裝 certbot 之前,必須先將要申請的 domain name 的 DNS A record 指向到要申請的機器上,例如 named 的設定中,將 testdomain.com.tw 以及 c1.testdomain.com.tw 指向到 211.72.214.209。


# testdomain.zone

@   IN  A   211.72.214.209
c1  IN  A   211.72.214.209

要安裝 cerbot,就直接在 官網 的下面選擇要安裝的 web server 以及 OS,目前我們是選用 Apache on CentOS 6。


sudo yum install epel-release
wget https://dl.eff.org/certbot-auto
mv certbot-auto certbot

## 如果是 centos 7 則是直接用 yum 安裝 certbot
# yum install certbot

chmod a+x certbot

直接執行 cerbot-auto 可以將 certbot 所有需要的相依性套件都安裝好


./certbot

certbot 支援幾種 plugins:Apache, Webroot, Standalone, Manual, Nginx, 其他 plugins。Standalone 的部分適合機器上沒有 web server daemon 的設定方式,我們可以使用 Apache 或是 Webroot,Apache 或 Nginx 的方式比較簡單,如果是 Webroot 的方式,需要讓 web server 可以存取 .well-known 這個目錄的檔案。


如果只要申請 terdomain.com.tw 這個 domain 的 certificate,只需要執行以下的指令,並依照畫面的問題填寫內容。


./certbot --apache

如果需要一個簽章裡面有多個 sub domain,可以直接在 command line 填寫兩個 domain names。


./certbot --apache -d testdomain.com.tw -d c1.testdomain.com.tw -m test@testdomain.com.tw

可以用 ssltest 檢測 https://www.ssllabs.com/ssltest/analyze.html?d=testdomain.com.tw 憑證的狀態。


檢測結果是 C,ssltest 建議要 disable SSL3,disable RC4 cipher,修改 ssl.conf


SSLProtocol all -SSLv2 -SSLv3

SSLHonorCipherOrder on

SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

然後重新啟動 httpd,再去 ssltest 重新檢測一次,可以達到 Rating A。


Debian 8 安裝程序


安裝 certbot for apache web server & debian 8 (jessie)


sudo apt-get install python-certbot-apache -t jessie-backports

certbot --apache

自動更新 ssl


certbot renew --dry-run

將 certbot 放到 cronjob/systemd


certbot renew --quiet

自動更新


以下指令可測試 cerbot 自動更新是否可以正常運作


./certbot renew --dry-run

將 certbot-auto 移動到 /etc 目錄中,在 crontab 增加一行,每週一凌晨 1:00AM 進行一次 renew。


* 1 * * 1 root /etc/certbot renew --quiet

Rate Limit


Let's Encrypt 在發送簽證有幾個限制,最後兩個是針對開發 ACME client 的限制,可以用 staging environment 替代,就可以避免該限制:
Rate Limits for Let’s Encrypt


  1. 在單一簽證上,最多只支援 100 個 names

  2. 每週每個 domain 限制只能申請 20 個 certificates

  3. 每週每個 FQDN,只能申請 5 個 certificates

  4. 每 3 hrs 接受 500 次註冊動作

  5. 每週每個 account 只能驗證 300 次


References


Let's Encrypt


Let's Encrypt Get Started


letsencrypt


申請​​ Let's Encrypt 免費​ SSL ​​憑證於​在 NGINX​ 伺服器上配置和​自動更新教學


免費SSL加密: Let's Encrypt 設定教學