飄易有一臺(tái)服務(wù)器安裝了LNMP 1.5的運(yùn)行環(huán)境,然后創(chuàng)建虛擬主機(jī)VHOST的時(shí)候,使用了Let'sEncrypt創(chuàng)建了免費(fèi)的SSL證書,這個(gè)證書是完全免費(fèi)的,但是有3個(gè)月的限制,意味著3個(gè)月后就需要續(xù)期,幸運(yùn)的是LNMP已經(jīng)自動(dòng)幫我們添加了一個(gè)計(jì)劃任務(wù),用于Let'sEncrypt SSL免費(fèi)證書的自動(dòng)續(xù)期。
LNMP 提供了一個(gè) ACME.SH 腳本,方便我們執(zhí)行SSL續(xù)期。
查看cron計(jì)劃任務(wù):
crontab -l 52 0 * * * "/usr/local/acme.sh"/acme.sh --cron --home "/usr/local/acme.sh" > /dev/null
這個(gè)自動(dòng)續(xù)期的腳本 acme.sh 會(huì)每天自動(dòng)運(yùn)行一次。
但是飄易發(fā)現(xiàn)有幾個(gè)域名的SSL證書到期了之后,并沒有自動(dòng)續(xù)期成功。于是手動(dòng)執(zhí)行以下這個(gè)腳本:
[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.
從這個(gè)錯(cuò)誤來看,可以看到SSL需要驗(yàn)證域名下的這個(gè)文件:
[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 這個(gè)腳本在寫驗(yàn)證文件時(shí),寫錯(cuò)路徑了:
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'
重新執(zhí)行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 續(xù)期成功!
并且以后再過期的時(shí)候,CRON計(jì)劃任務(wù)也會(huì)自動(dòng)續(xù)期了。
【其他問題】
1、如果之前在nginx的配置文件里啟用了 http 強(qiáng)制跳轉(zhuǎn)到 https 的配置,這個(gè)地方也會(huì)續(xù)期失敗,需要臨時(shí)先將這段配置注釋掉:
# http重定向301跳轉(zhuǎn)https #if ($server_port !~ 443){ # rewrite ^(.*)$ https://$host$1 permanent; #}
原因很簡(jiǎn)單,現(xiàn)在https已經(jīng)過期了,再?gòu)?qiáng)制跳轉(zhuǎn)到https去驗(yàn)證下面的文件,當(dāng)然是不成功的。
2、如果你有PC站和移動(dòng)站自動(dòng)跳轉(zhuǎn)適配過,也需要注意臨時(shí)取消自動(dòng)跳轉(zhuǎn),比如 移動(dòng)端的配置:
# PC客戶端跳轉(zhuǎn) if ($http_user_agent !~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) { #rewrite ^(.*) https://tai.test.cn$1 redirect; }
否則驗(yàn)證文件會(huì)跳轉(zhuǎn)到對(duì)應(yīng)的PC端路徑下去拉取,這個(gè)當(dāng)然是錯(cuò)誤的。
3、頻率限制錯(cuò)誤
- 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}
這個(gè)是說明觸發(fā)了SSL認(rèn)證的頻率限制了,目前有一個(gè)限制是:每個(gè)賬戶每小時(shí)每域名有最多驗(yàn)證失敗 5 次的限制。我們稍微等一會(huì)就好了。關(guān)于這個(gè)頻率限制,具體參考: https://letsencrypt.org/docs/rate-limits/