Xampp在CentOS7上使用 Let's Encrypt建立ssl憑證及自動更新憑證的方法
Let's Encryp是一個免費、自動化、開放,為了公眾利益而運作的憑證頒發機構 (Certificate Authority, CA)。它是由 Internet Security Research Group (ISRG) 所提供的服務。
Let's Encryp為傳輸層安全 (TLS) 加密提供免費證書,從而在 Web 服務器上啟用加密的 HTTPS。它通過提供可自動執行大部分步驟的軟件客戶端Certbot 來簡化證書的創建、驗證、簽名、安裝和更新過程。
如需申請Let's Encryp憑證需在伺服器端執行,以下為Xampp在CentOS7上使用 Let's Encrypt建立ssl憑證及自動更新ssl憑證方法
前置準備
1->安裝PuTTY 使用ssh連線進入伺服器端
如您有root權限,建議建議安裝以下自由軟體可更便利操作編輯設定,如果沒有root權限請跳過2.3
2->安裝filezilla 使用root->ssh連線進入伺服器端
3->安裝Notepad++,並吧filezilla預設編輯器設為Notepad++
開始設定(如有root權限不用輸入sudo)
1、首先要先關閉XAMPP伺服器,因為apache會占用80port或443port導致憑證申請驗證失敗,請輸入以下指令關閉Xampp
sudo /opt/lampp/lampp stop
2、安裝 Certbot Let's Encrypt 於伺服器端
要使用 Let's Encrypt獲取 SSL憑證,您首先需要安裝Certbot和mod_sslApache套件,它提供對SSLv3加密的支持。
增加 CentOS7 EPEL存儲庫,請輸入以下指令:
sudo yum install epel-release
3、安裝所有必需的套件:
sudo yum install certbot python2-certbot-apache mod_ssl
CENTOS 8需安裝certbotsudo yum -y install epel-release mod_ssl certbot'
Ubuntu22.04需安裝certbot
sudo apt update
sudo apt install certbot
出現提示時輸入y並按下ENTER接受GPG密鑰
4、申請下載ssl證書(需使用正式網址,注意apache一定要是關閉狀態才不會被占用80port)
如為單一網址請輸入以下指令
sudo certbot certonly --standalone -d example.com
如果有使用www請輸入以下指令
sudo certbot certonly --standalone -d example.com -d www.example.com
備註:example.com替換您目前的網址
過程中會提示輸入您的E-MAIL,請輸入實際使用的,之後憑證到期前會發送通知到此email
同意條款輸入A,然後其他提示輸入y,最後會顯示以下結果
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/www.example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/www.example.com/privkey.pem
Your certificate will expire on 2021-12-17. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again. To non-interactively renew *all* of your
certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Ubuntu22.04關閉自動更新(因為要重啟XAMPP需要使用自訂更新腳本)
sudo systemctl disable certbot.timer
sudo systemctl stop certbot.timer
到這裡就完成證書的申請流程,證書已經存放在伺服器的etc/letsencrypt/live/www.example.com/資料夾裡面,可以輸入以下指令觀看檔案
sudo cd /etc/letsencrypt/live/www.example.com/ 共有五個檔案
->cert.pem
->chain.pem
->fullchain.pem
->privkey.pem
->README
備註:www.example.com 改為您申請憑的網址
如果沒有這5個檔因該是第4項沒跑好,建議再重做一次
5、接下來要處理Xampp的部分,需指定憑證的位置,xampp的憑證設定是在 /opt/lampp/etc/extra/httpd-ssl.conf
如果有root權限直接用filezilla打開httpd-ssl.conf檔編輯,如果沒有請輸入sudo vi /opt/lampp/etc/extra/httpd-ssl.conf編輯
vi 編輯器操作教學:http://linux.vbird.org/linux_basic/0310vi/0310vi.php
搜尋以下三個關鍵字並做修改
->搜尋SSLCertificateFile 找到以下設定
SSLCertificateFile "conf/ssl.crt/server.crt"
替換為
SSLCertificateFile "/etc/letsencrypt/live/www.example.com/cert.pem"
->搜尋SSLCertificateKeyFile 找到以下設定
SSLCertificateKeyFile "conf/ssl.key/server.key"
替換為
SSLCertificateKeyFile "/etc/letsencrypt/live/www.example.com/privkey.pem"
->搜尋SSLCertificateChainFile 找到以下設定
#SSLCertificateChainFile "/opt/lampp/etc/server-ca.crt"
吧前面的#拿掉,替換為
SSLCertificateChainFile "/etc/letsencrypt/live/www.example.com/chain.pem"
備註:www.example.com 改為您申請憑證放置於/etc/letsencrypt/live/中的網址
另外還有三處要修改(不改亦可但SSL安全協定會使用TLSv1.0、SSLv3舊版的)修改完之後會是TLS 1.3
->搜尋SSLProtocol 找到以下設定
SSLProtocol all -SSLv3
替換為
SSLProtocol all -TLSv1.1 -TLSv1 -SSLv2 -SSLv3
httpd-ssl.conf中若無則增加此段設定
->搜尋SSLCipherSuite 找到以下設定
SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
替換為
SSLCipherSuite ALL:+HIGH:!ADH:!EXP:!SSLv2:!SSLv3:!MEDIUM:!LOW:!NULL:!aNULL
->搜尋SSLHonorCipherOrder找到以下設定
#SSLHonorCipherOrder on
吧前面的#拿掉,替換為
SSLHonorCipherOrder on
然後儲存檔案
完成以下步驟後重啟XAMPP
sudo /opt/lampp/lampp start
之後輸入https:網址進入網站https://www.example.com 會發現瀏覽器網址左邊出現一個鎖的圖案,點選後會顯示->已建立安全線練
不過如果您的網站表單網址還是http://,例如登入或聯絡我們post的網址是http://,左邊鎖的圖案點了會出現不安全的紅字,所以除了伺服器ssl憑證建立外,網站中全部的內連網址路徑包含資料表中的都要改成https://才行
6、最後是要做自動更新,如過沒有做 Let's Encrypt 憑證的效期90天後就會失效,當然您也可以手動驗證,到期之前Let's Encrypt 會寄通知信到您申請憑證的信箱。
以下是設定手動更新的方法
單一網址
sudo certbot certonly --standalone --renew-by-default -d example.com
www網址
sudo certbot certonly --standalone --renew-by-default -d example.com -d www.example.com
如果不想那麼麻煩,可以寫一個自動更新程式cron讓系統定時自己進renew!
首先先寫一個renew_ssl.sh =>請到root下面
sudo cd /root/
sudo vi renew_ssl.sh
然後貼上以下檔案
單一網址
/opt/lampp/lampp stop
certbot certonly --standalone --renew-by-default -d example.com
/opt/lampp/lampp start
www網址
/opt/lampp/lampp stop
certbot certonly --standalone --renew-by-default -d example.com -d www.example.com
/opt/lampp/lampp start
備註:www.example.com 改為您申請憑的網址
這樣在伺服器的root目錄底下就會建立一個renew_ssl.sh檔,然後裡面就會是我們需要執行的程式腳本
最後在設定自動更新時間
輸入以下指令
sudo crontab -e
輸入i編輯貼上以下內容
30 3 1 */2 * /root/renew_ssl.sh >> /root/renew_ssl.log
按下 [ESC] 按鈕回到一般模式;
輸入:wq 儲存後離開
Ubuntu22.04使用/bin/nano 編輯器
按下 Ctrl 鍵和 O 鍵以保存文件。會看到提示要求確認文件名,按 Enter 鍵確認。
然後,按下 Ctrl 鍵和 X 鍵以退出 nano。
儲存離開後將renew.sh給予執行權限。
chmod 755 /root/renew_ssl.sh
這樣每兩個月的1號清晨3點30分,執行/root/renew_ssl.sh 並且把 執行的結果紀錄放到/root/renew_ssl.log下,執行有問題可看此log
但有可能遇到更新失敗,例如伺服器網路剛好斷線,以上腳本執行一次後就不會執行,導致SSL憑證更新失敗,所以要加上遞迴處理程式!!
以上內容貼到root/renew_ssl.sh
example.com 改為您的網址最後如果是用編輯器換行符和 Linux 環境下不同,可能會導致檔案無法讀取,輸入以下指令轉換為 Unix 格式
sed -i 's/\r//' /root/renew_ssl.sh
輸入
sh
/root/renew_ssl.sh
7、最後在網站跟目錄/opt/lampp/htdocs放置一個.htaccess設定自動轉HTTPS://用編輯器打開輸入
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
然後是設定HSTS(一樣貼在.htaccess)<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
</IfModule>
到這裡Xampp在CentOS7上使用 Let's Encrypt建立ssl憑證及自動更新ssl憑證工作就全部完成了,您可以用以下網址檢測憑證是否有效
https://www.ssllabs.com/ssltest/analyze.html?d=example.com
※吧example.com替換您的網址即可測試
https://check.twnic.tw/如果還沒申請憑證各大瀏覽器都會顯示不安全的紅色圖標,而且沒有ssl加密連線的網站於搜尋中排名也會下降,既然Let's Encrypt是免費的也不難申請,建議大家快去申請來使用吧。
參考資料來源
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-centos-7
https://www.brilliantcode.net/1229/apache-advance-settings-tlsv1-2-tlsv1-1-sslv3/
以上工作心得分享,有需要的朋友參考看看
工作心得撰寫:徐嘉裕 Neil hsu
留言
張貼留言