Let’s Encrypt

Google 宣布自2017年1月起,Chrome使用者瀏覽到HTTP網站時,網址列將出現「不安全」的警告標示,提醒用戶資料可能因此遭竊。此外,Google 同時提高採用 HTTPS 協定的網站搜尋排名。因此,為網站加密使用 HTTPS 協定將短期內快速成長,也意味著HTTP終將消失。

要使用 HTTPS 加密協定,就要找一家 CA 發憑證,這是要 NT$ 的。還好,由許多大公司以及各大非營利團體,為了推廣 HTTPS 贊助一家免費發佈 SSL certificate 的 Certiciate Authority:Let’s Encrypt

就來試一試吧:

現有一台剛裝好的 CentOS 7,就讓它的變成有綠色鎖頭的加密網站吧!

一、安裝需求套件:其中 epel-release 是要拿來安裝 certbot 的 yum  repositories#yum install httpd mod_ssl openssl epel-release
二、啟動網頁伺服器:並先產生一個網頁檔,以確認服務正常。
 #systemctl start httpd
 #echo "<h1>HELLO</h1>" > /var/www/html/index.html
三、開防火牆:
 #firewall-cmd --zone=public --add-port=80/tcp --add-port=443/tcp --permanent
 可用 #firewall-cmd --list-all 確認防火牆是否開啟 (使用 #iptables -L -n 也行)
 

四、測試網頁服務正常:
(1)直接先用 IP 連線看 http 服務是否正常

(2)用 IP 連線看 https 服務是否正常:連線正常,但憑證是不安全的,先把它新增到到外網站去。

(3)可以看到,憑網站正常,但憑證是自已簽發的。

五、設定 DNS:
就看自己的 DNS 服務是那邊提供的,設定 2 組 (用 2 組是因為要測試 SAN, Subject Alternative Name,不同 FQDN 用一個憑證即可,如果只需要 1 個 FQDN 的憑證,那就只設 1 組即可),設好要能夠解析,而且是 Let’s Encrypt 要能查得到才行,可用 8.8.8.8 來測試 DNS 有效性。我設了 2 組測試網址:weba.test.ntpc.edu.tw 及 webb.test.ntpc.edu.tw:

設定好 FQDN,可以再用瀏覽器連看看:



六、安裝 CertBOT:會連 python 相關套件一併安裝
 #yum install python-certbot-apache
 安裝完成,查一下:
 #ls -al /usr/bin/*cert*
 

七、測試簽署憑證:使用 –staging 選項做測試,其中 webroot 是指直接在 webroot 裡建立檔案,讓 Let’s Encrypt 透過 ACME 機制驗證 FQDN 所有權。因為 Let’s Encrypt 的憑證簽署,在正式環境內有次數限制:「There is a Failed Validation limit of 5 failures per account, per hostname, per hour.」每小時 5 次,所以先在 staging environment 做測試,至少每小時可失敗 60 次,讓你有充裕的次數去除錯。

 #certbot --staging certonly --webroot -d weba.test.ntpc.edu.tw -d webb.test.ntpc.edu.tw
 輸入連絡人email、同意服務條款、並決定是否同意收Email:
 

輸入 webroot 的路徑,預設在 /var/www/html,因為第 2 個 FQDN 放在同一個地方,所以就選 2,如果有不同虛擬網站,這邊一定要輸入正確的路徑。

成功!可以改用正式環境來簽署了!

八、正式簽署憑證:
 #certbot certonly --webroot -d weba.test.ntpc.edu.tw -d webb.test.ntpc.edu.tw
 更新成正式憑證,也有次數限制喔。
 

程序一樣,成功!記住憑證檔及私鑰路徑。

九、更新 httpd.conf 及 ssl.conf 
 #vi /etc/httpd/conf.d/ssl.conf
 在 SSLCertificateFile 後面改成憑證檔路徑、在 SSLCertificateKeyFile 後面改成私鑰路徑
 

#vi /etc/httpd/conf.d/ssl.conf
在設定檔補上 RewirteEngine,會自動將 http 連線改寫成 https:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L]

十、重啟網頁伺服器、確認憑證:
 #systemctl reload httpd

用瀏覽器確認憑證的有效性,不管是輸入 http://FQDN 或 https://FQDN,最後都會重導成 https://FQDN,綠色鎖頭出來了,YA:

憑證有效期只有 3 個月,所以要記得更新憑證:

十一、啟動自動更新憑證:
 更新憑證的指令選項是: #certbot renew 
 利用 crond 排程執行,編輯 crontab,下列例子是每天的上午 12:55 會執行 #certbot renew 的指令
 #vi /etc/crontab
 
存檔後重載 crond 設定檔:
 #systemctl reload crond
可使用 #cat /var/log/cron 看是否執行
 

十二、大功告成!!