解決問題 SSL/TLS (4)

教學目標

主要解決如何應用 Let’s Encrypt 憑證進行安全連線的問題。

重點概念

Let’s Encrypt

Let’s Encrypt 主要是一個免費自動化的和開放的憑證頒發機構,由 ISRG 組織所提供的服務。通常我們會透過數位憑證啟用網站的 HTTPS (SSL/TLS) 安全協定,因此透過 Let’s Encrypt 所提供的憑證能夠建立一個更安全,更具隱私性的網際網路。

SSL For Free

然而 Let’s Encrypt 安裝與設定需要熟悉 Linux 指令和了解自動憑證管理環境(ACME) 才能夠取得憑證,過程有點複雜,因此就有開發者推出 SSL For Free 線上工具,讓我們直接透過網站取得免費的 SSL 憑證,重點是此 SSL 憑證主要是連接 Let’s Encrypt 的憑證,簡單三步驟就能下載憑證和金鑰檔。

申請網域

開啟[SSL For Free」網站輸入將要申請 Let’s Encrypt 憑證的網站之網域,按下「Create Free SSL Certificate」。

手動驗證

點選「Manual Verification」,接著下載「Download File #1」和「Download File #2」兩個檔案,再來將兩個放置網站中的「/.well-known/acme-hallenge」路徑目錄中,請注意檔名和內容要一樣,當設定完成之後請測試是否可以透過瀏覽器透過網站下「/.well-known/acme-hallenge」路徑開啟那兩個檔案。

下載憑證

點選「Download SSL Certificate」,此時「SSL For Free」網站就會開始產生 SSL 憑證,當憑證產生完成之後建議註冊信箱帳號,因為 Let’s Encrypt 憑證簽發為每三個月一次,也就是說我們每 90 天就必須更新一次,所以透過「SSL For Free」的訂閱通知機制,可以在憑證過期前收到電子郵件的通知。最後點選下方「Download ALL SSL Certificate Files」,即可完成憑證的建立。

下一步請根據不同需求參考下述三篇文章,將 SSL 憑證和金鑰檔進行設定。

Certbot

此外根據 Let’s Encrypt 官方網站針對 ACME 客戶端實作則建議使用 Certbot,可以透過簡單的 Linux 指令就完成 Apache 2 之 SSL 的設定,同時還能夠設定排程自動更新,相較於 SSL For Free 更是完整的解決方案,僅要簡單三步驟就能完成 Apache 2 之 SSL 設定。

安裝套件

下載與安裝 Certbot 套件。

1
2
3
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-apache

設定憑證

設定憑證至 Apache 2 伺服器,同時直接啟用 HTTPS (SSL/TLS) 安全協定。

1
2
$ sudo certbot --apache -d myserver.com -d www.myserver.com
$ service apache2 restart

設定排程

編輯排程檔案「/etc/crontab」。

1
$ sudo vi /etc/crontab

設定每天早上五點三十分執行 Certbot 更新指令。

1
30 5 * * * /usr/bin/certbot renew --quiet

SSL Labs SSL Server Test

最後當我們完成 Apache 2 伺服器的 HTTPS (SSL/TLS) 安全協定之後,接著就能透過 SSL Labs 網站所提供的 SSL 伺服器測試功能進行全方面安全的驗證與測試。

開啟 SSL Labs 網站所提供的 SSL 伺服器測試功能,其中 myserver.com 請修改為網站之網域。

1
$ firefox https://www.ssllabs.com/ssltest/analyze.html?d=myserver.com&latest

當然可能會有下述安全問題發生,此時可能會影響整體評分,所以我們針對下述問題進行調整,以利提高整體評分為 A (綠色)。

RC4

此問題主要是有關 RC4 加密演算法不安全。

1
This server accepts RC4 cipher, but only with older protocols. Grade capped to B.

解決方式主要是修改「/etc/apache2/mods-enabled/ssl.conf」中的「SSLHonorCipherOrder」和「SSLCipherSuite」參數。

1
2
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

SSL3

此問題主要是有關 SSL3 安全協定不安全。

1
This server is vulnerable to the POODLE attack. If possible, disable SSL 3 to mitigate. Grade capped to C.

解決方式主要是修改「/etc/apache2/mods-enabled/ssl.conf」中的「SSLProtocol」參數。

1
SSLProtocol all -SSLv3

OpenSSL

此問題主要是有關 OpenSSL 套件不安全。

1
This server is vulnerable to the OpenSSL Padding Oracle vulnerability (CVE-2016-2107) and insecure. Grade set to F.

解決方式主要是更新 OpenSSL 套件。

1
sudo apt-get install --only-upgrade libssl1.0.0 openssl

總結我們透過 Let’s Encrypt 所提供的憑證,搭配 SSL For Free 或 Certbot 將可以很方便的將網站設定為 HTTPS (SSL/TLS) 安全連線,接著再透過 SSL Labs SSL Server Test 網站進行安全性的驗證和測試,最後會得出一份SSL 報告,透過報告我們將可以更清楚了解憑證的詳細資訊、不同平台的 TLS 模擬測試結果和整體協定安全性的驗證和測試,因此這份 SSL 報告非常的實用。

相關資源