飄易有一臺服務器安裝了LNMP 1.5的運行環境,然后創建虛擬主機VHOST的時候,使用了Let'sEncrypt創建了免費的SSL證書,這個證書是完全免費的,但是有3個月的限制,意味著3個月后就需要續期,幸運的是LNMP已經自動幫我們添加了一個計劃任務,用于Let'sEncrypt SSL免費證書的自動續期。
LNMP 提供了一個 ACME.SH 腳本,方便我們執行SSL續期。
查看cron計劃任務:
crontab -l 52 0 * * * "/usr/local/acme.sh"/acme.sh --cron --home "/usr/local/acme.sh" > /dev/null
這個自動續期的腳本 acme.sh 會每天自動運行一次。
但是飄易發現有幾個域名的SSL證書到期了之后,并沒有自動續期成功。于是手動執行以下這個腳本:
[Fri Jan 17 14:16:21 CST 2020] Renew: 'dongfang.piaoyi.org' [Fri Jan 17 14:16:24 CST 2020] Single domain='dongfang.piaoyi.org' [Fri Jan 17 14:16:24 CST 2020] Getting domain auth token for each domain [Fri Jan 17 14:16:24 CST 2020] Getting webroot for domain='dongfang.piaoyi.org' [Fri Jan 17 14:16:24 CST 2020] Getting new-authz for domain='dongfang.piaoyi.org' [Fri Jan 17 14:16:27 CST 2020] The new-authz request is ok. [Fri Jan 17 14:16:27 CST 2020] Verifying:dongfang.piaoyi.org [Fri Jan 17 14:16:31 CST 2020] dongfang.piaoyi.org:Verify error:Invalid response from http://dongfang.piaoyi.org/.well-known/acme-challenge/JyjWREY2lkrcpAFAD5gkZ0LffaTB2xQxB9Id-my5Puw: [Fri Jan 17 14:16:31 CST 2020] Please check log file for more details: /usr/local/acme.sh/acme.sh.log [Fri Jan 17 14:16:32 CST 2020] Error renew dongfang.piaoyi.org.
從這個錯誤來看,可以看到SSL需要驗證域名下的這個文件:
[Fri Jan 17 14:16:27 CST 2020] _currentRoot='/storage/wwwroot/dongfang.piaoyi.org' [Fri Jan 17 14:16:27 CST 2020] wellknown_path='/storage/wwwroot/dongfang.piaoyi.org/.well-known/acme-challenge' [Fri Jan 17 14:16:27 CST 2020] writing token:JyjWREY2lkrcpAFAD5gkZ0LffaTB2xQxB9Id-my5Puw to /storage/wwwroot/dongfang.piaoyi.org/.well-known/acme-challenge/JyjWREY2lkrcpAFAD5gkZ0LffaTB2xQxB9Id-my5Puw [Fri Jan 17 14:16:27 CST 2020] Changing owner/group of .well-known to www:www ...... [Fri Jan 17 14:16:31 CST 2020] dongfang.piaoyi.org:Verify error:Invalid response from http://dongfang.piaoyi.org/.well-known/acme-challenge/JyjWREY2lkrcpAFAD5gkZ0LffaTB2xQxB9Id-my5Puw:
可以看到Let'sEncrypt ACME.sh 這個腳本在寫驗證文件時,寫錯路徑了:
lnmp或lnmpa 的話 /usr/local/nginx/conf/ssl/域名/域名.conf lamp的話 /usr/local/apache/conf/ssl/域名/域名.conf
將
Le_Webroot='/storage/wwwroot/dongfang.piaoyi.org'
修改為
Le_Webroot='/storage/wwwroot/dongfang.piaoyi.org/public'
重新執行acme腳本:
[Fri Jan 17 14:36:05 CST 2020] Renew: 'dongfang.piaoyi.org' [Fri Jan 17 14:36:06 CST 2020] Single domain='dongfang.piaoyi.org' [Fri Jan 17 14:36:06 CST 2020] Getting domain auth token for each domain [Fri Jan 17 14:36:06 CST 2020] Getting webroot for domain='dongfang.piaoyi.org' [Fri Jan 17 14:36:06 CST 2020] Getting new-authz for domain='dongfang.piaoyi.org' [Fri Jan 17 14:36:10 CST 2020] The new-authz request is ok. [Fri Jan 17 14:36:10 CST 2020] Verifying:dongfang.piaoyi.org [Fri Jan 17 14:36:14 CST 2020] Success [Fri Jan 17 14:36:14 CST 2020] Verify finished, start to sign. [Fri Jan 17 14:36:15 CST 2020] Cert success. [Fri Jan 17 14:36:15 CST 2020] Your cert is in /usr/local/nginx/conf/ssl/dongfang.piaoyi.org/dongfang.piaoyi.org.cer [Fri Jan 17 14:36:15 CST 2020] Your cert key is in /usr/local/nginx/conf/ssl/dongfang.piaoyi.org/dongfang.piaoyi.org.key [Fri Jan 17 14:36:16 CST 2020] The intermediate CA cert is in /usr/local/nginx/conf/ssl/dongfang.piaoyi.org/ca.cer [Fri Jan 17 14:36:16 CST 2020] And the full chain certs is there: /usr/local/nginx/conf/ssl/dongfang.piaoyi.org/fullchain.cer [Fri Jan 17 14:36:16 CST 2020] Run reload cmd: /etc/init.d/nginx reload Reload service nginx... done [Fri Jan 17 14:36:16 CST 2020] Reload success
SSL 續期成功!
并且以后再過期的時候,CRON計劃任務也會自動續期了。
【其他問題】
1、如果之前在nginx的配置文件里啟用了 http 強制跳轉到 https 的配置,這個地方也會續期失敗,需要臨時先將這段配置注釋掉:
# http重定向301跳轉https #if ($server_port !~ 443){ # rewrite ^(.*)$ https://$host$1 permanent; #}
原因很簡單,現在https已經過期了,再強制跳轉到https去驗證下面的文件,當然是不成功的。
2、如果你有PC站和移動站自動跳轉適配過,也需要注意臨時取消自動跳轉,比如 移動端的配置:
# PC客戶端跳轉 if ($http_user_agent !~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) { #rewrite ^(.*) https://tai.test.cn$1 redirect; }
否則驗證文件會跳轉到對應的PC端路徑下去拉取,這個當然是錯誤的。
3、頻率限制錯誤
- new-authz error: {"type":"urn:acme:error:rateLimited","detail":"Error creating new authz :: too many failed authorizations recently: see https://letsencrypt.org/docs/rate-limits/","status": 429}
這個是說明觸發了SSL認證的頻率限制了,目前有一個限制是:每個賬戶每小時每域名有最多驗證失敗 5 次的限制。我們稍微等一會就好了。關于這個頻率限制,具體參考: https://letsencrypt.org/docs/rate-limits/