![安裝 LetsEncrypt SSL 時發生錯誤:(http-01): urn:acme:error:connection :: 伺服器無法連線到客戶端以驗證網域](https://rvso.com/image/696997/%E5%AE%89%E8%A3%9D%20LetsEncrypt%20SSL%20%E6%99%82%E7%99%BC%E7%94%9F%E9%8C%AF%E8%AA%A4%EF%BC%9A(http-01)%3A%20urn%3Aacme%3Aerror%3Aconnection%20%3A%3A%20%E4%BC%BA%E6%9C%8D%E5%99%A8%E7%84%A1%E6%B3%95%E9%80%A3%E7%B7%9A%E5%88%B0%E5%AE%A2%E6%88%B6%E7%AB%AF%E4%BB%A5%E9%A9%97%E8%AD%89%E7%B6%B2%E5%9F%9F.png)
我正在嘗試安裝LetsEncrypt
在我的伺服器(我有 root SSH 存取權限)上,for staging.dnslaude.com
- 這是一個可公開存取的網域,指向213.212.81.89
.
伺服器正在運行ubuntu 16.04
,並且是一個nginx
網頁伺服器。下面是nginx
配置:
server {
listen 80;
server_name staging.dnslaude.com;
root /path/to/webroot;
location ^~ /.well-known/acme-challenge/ {
try_files $uri $uri/ =404;
}
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443;
ssl on;
ssl_certificate /path/to/self/signed/certificate.crt;
ssl_certificate_key /path/to/key.key;
server_name staging.dnslaude.com;
root /path/to/webroot;
# ....
location ^~ /.well-known/acme-challenge/ {
try_files $uri $uri/ =404;
}
}
可以看到nginx
配置出現工作,因為我已手動將文件放入acme-challenge
資料夾中這裡。
但是,當我運行命令時:
letsencrypt certonly --webroot -w /path/to/webroot -d staging.dnslaude.com
它會傳回以下錯誤:
授權程序失敗。 staging.dnslaude.com (http-01): urn:acme:error:connection :: 伺服器無法連接到客戶端以驗證網域 :: 無法連接到 staging.dnslaude.com
重要說明: - 伺服器報告以下錯誤:
網域:staging.dnslaude.com 類型:連線詳細資料:無法連線到 staging.dnslaude.com
若要修復這些錯誤,請確保您
輸入的網域名稱正確且該網域的 DNS A 記錄
包含正確的 IP 位址。此外,請檢查
您的電腦是否具有可公開路由的 IP 位址,並且沒有
防火牆阻止伺服器與
用戶端通訊。如果您使用的是 webroot 插件,您還應該驗證
您是否正在從您提供的 webroot 路徑提供檔案。
我遵循了概述的基本設定指南這裡,並嘗試了各種配置變化,例如建議的那些這裡。但是,我無法克服上述錯誤 - 並且無法在日誌文件中看到任何內容來指示原因。
有什麼建議麼?
答案1
您的 nginx 設定看起來正確。
憑著預感,我跑了nmap
反對你的網域(因為你將其包含在你的問題中);看來您目前正在過濾連接埠 80,因此 LetsEncrypt 無法外部連線並進行驗證。
您需要確保相關伺服器的本機防火牆(以及虛擬主機提供者或類似提供者上可能存在的任何 ACL)上的連接埠 80 可從外部存取。
答案2
如果您將 http-01 質詢從 http 重新導向到 https,也可能會發生此錯誤。 .well-known/acme-challenge 目錄需要可透過連接埠 80 上的 http 存取。
答案3
他們故意混淆視聽。我也遇到了同樣的 400 錯誤,並再次開始了更新。前幾次有不同的錯誤。解決方案:免費從 SSL 中刪除先前的證書,並從伺服器上卸載過期的證書。 (雖然過期的憑證仍然配置並處於活動狀態,但您將永遠不會獲得新的憑證)jar2