[GCP] Bitnami 用的 Let’s Encrypt 憑證被撤銷了,如何重新簽發?
之前看到 Let’s Encrypt將在5天內撤銷約200萬誤發的憑證 這篇新聞,
跑去看了一下自己的網站上用的憑證,
嗯… 發行者是 R3,感覺好像不是 Let’s Encrypt?就不太在意。
沒想到,今天上網站看時,發現憑證已經失效了:
把憑證展開來看,原來 R3 就是 Let’s Encrypt 的中繼憑證,
而 Root CA 是 ISRG Root X1:
如果去看 Chain of Trust – Let’s Encrypt 的話,
也可以看到這個信任鍊的關聯:
因此,事實上我用的就是 Let’s Encrypt 發出來的憑證,
所以在 2022/1/28 起就被撤銷了…
如果單純地重新執行 /opt/bitnami/bncert-tool 的話,
它會找到舊的的憑證,並認為你是想要更新 (renew) 憑證。
然而,因為憑證已經被撤銷,因此雖然更新的動作可以完成,
但是瀏覽器還是會認為憑證無效…
$ sudo /opt/bitnami/bncert-tool Warning: Custom redirections are not supported in the WordPress Multisite packaged by Bitnami. This tool will not be able to enable/disable redirections. Press [Enter] to continue: ---------------------------------------------------------------------------- Welcome to the Bitnami HTTPS Configuration tool. ---------------------------------------------------------------------------- Domains Please provide a valid space-separated list of domains for which you wish to configure your web server. Domain list []: ephrain.net Warning: A certificate for the list of domains you entered already exists. It will be used instead of generating a new one. Press [Enter] to continue:
爬文+嘗試了半天,終於可以丟掉失效的憑證,重新簽發一張新的…
來看一下怎麼做吧~
1. 移除 cron job 中自動更新憑證的動作
依序執行下面的指令,檢查一下 root 和 bitnami 帳號的 cron job:
sudo crontab -e sudo crontab -e -u bitnami
我的 root 帳號裡沒有 cron job,但 bitnami 的有如下的:
0 0 * * * sudo /opt/bitnami/letsencrypt/lego --path /opt/bitnami/letsencrypt --email="[email protected]" --http --http-timeout 30 --http.webroot /opt/bitnami/apps/letsencrypt --domains=ephrain.net renew && sudo /opt/bitnami/ap ache/bin/httpd -f /opt/bitnami/apache/conf/httpd.conf -k graceful # bncert-autorenew
將那一行 bitnami 的 cron job 刪除 (vi 中按 dd 刪除一行) 並儲存。
2. 修改設定檔,回復使用預設憑證
執行下面指令來編輯 /opt/bitnami/apache2/conf/bitnami/bitnami-ssl.conf:
sudo vi /opt/bitnami/apache2/conf/bitnami/bitnami-ssl.conf
它的檔案內容可能如下,在 <VirtualHost> 的部分,
有 SSLCertificateFile/SSLCertificateKeyFile 指向舊的簽章和私鑰:
Listen 443 SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+ aRSA+SHA256 EECDH !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !EDH !RC4" SSLPassPhraseDialog builtin SSLSessionCache "shmcb:/opt/bitnami/apache/logs/ssl_scache(512000)" SSLSessionCacheTimeout 300 <VirtualHost _default_:443> DocumentRoot "/opt/bitnami/apache/htdocs" SSLEngine on SSLCertificateFile "/opt/bitnami/apache/conf/ephrain.net.crt" SSLCertificateKeyFile "/opt/bitnami/apache/conf/ephrain.net.key"
將 SSLCertificateFile/SSLCertificateKeyFile 那兩行刪除,
在全域的地方加上預設的 SSLCertificateFile/SSLCertificateKeyFile 值:
- SSLCertificateFile: /opt/bitnami/apache2/conf/bitnami/certs/server.crt
- SSLCertificateKeyFile: /opt/bitnami/apache2/conf/bitnami/certs/server.key
改完後的樣子如下:
Listen 443 SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+ aRSA+SHA256 EECDH !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !EDH !RC4" SSLPassPhraseDialog builtin SSLSessionCache "shmcb:/opt/bitnami/apache/logs/ssl_scache(512000)" SSLSessionCacheTimeout 300 SSLCertificateFile "/opt/bitnami/apache2/conf/bitnami/certs/server.crt" SSLCertificateKeyFile "/opt/bitnami/apache2/conf/bitnami/certs/server.key" <VirtualHost _default_:443> DocumentRoot "/opt/bitnami/apache/htdocs" SSLEngine on
改完後記得存檔。
接著執行下面指令來編輯 /opt/bitnami/apache2/conf/vhosts/wordpress-https-vhost.conf:
sudo vi /opt/bitnami/apache2/conf/vhosts/wordpress-https-vhost.conf
它的內容部分如下:
VirtualHost 127.0.0.1:443 _default_:443> ServerAlias * SSLEngine on SSLCertificateFile "/opt/bitnami/apache/conf/ephrain.net.crt" SSLCertificateKeyFile "/opt/bitnami/apache/conf/ephrain.net.key"
將 SSLCertificateFile/SSLCertificateKeyFile 的部分一樣替換掉:
VirtualHost 127.0.0.1:443 _default_:443> ServerAlias * SSLEngine on SSLCertificateFile "/opt/bitnami/apache2/conf/bitnami/certs/server.crt" SSLCertificateKeyFile "/opt/bitnami/apache2/conf/bitnami/certs/server.key"
改完一樣記得存檔。
接著執行下面指令,重新啟動 Bitnami 所有的服務:
sudo /opt/bitnami/ctlscript.sh restart
這時再去看網站的憑證的話,
可以發現它已經換成一個 self-signed 的簽章了:
3. 重新產生新的憑證
要重新產生新的憑證之前,得先刪除舊的憑證目錄:
sudo rm -rf /opt/bitnami/letsencrypt/certificates
若是直接刪除不放心的話,也可以先將 certificates 目錄改名,
等全部都沒問題後,再刪掉 certificates_old 目錄也行:
sudo mv /opt/bitnami/letsencrypt/certificates /opt/bitnami/letsencrypt/certificates_old
接著再執行 sudo /opt/bitnami/bncert-tool
指令來建立新的憑證,
這邊就跟 在 Bitnami 網站上,啟用 Let’s Encrypt 的 HTTPS 憑證 的步驟一樣了。
跑完之後,憑證終於回復正常啦:
參考資料:
- Learn about the Bitnami HTTPS Configuration Tool
- Completely remove Lets Encrypt SSL installed using bncert-tool