
我在 ubuntu 伺服器(16.04)上有多個帶有 nginx/1.10.0 + Letsencrypt 的網站。
從瀏覽器中的外觀來看,SSL 運作良好且完美。但是我們的開發人員應用程式使用curl請求(帶有SSL)並且面臨錯誤,如下所示
Update Failed: Download failed. cURL error 51: SSL: certificate subject name 'domain2.com' does not match target host name 'domain1.com'
使用 SSLLABS 檢查時,它顯示 A_grade 但正在載入多個憑證(同一伺服器中另一個網域的憑證)
Certificate #1: RSA 2048 bits (SHA256withRSA)
和
Certificate #2: RSA 2048 bits (SHA256withRSA) No SNI
在第二個證書下,存在以下錯誤。
Common names domain2.com MISMATCH
Trusted No NOT TRUSTED
Curl 錯誤也提到了第二個網域。
cURL error 51: SSL: certificate subject name 'domain2' does not match target host name 'domain1'
domain2 是完全不同的網站。不知道 nginx 如何將其訊息與domain1一起發送。
此外,我還透過使用 Letsencrypt SSL 建立網域在其他伺服器中測試了相同的場景,並且所有伺服器都存在相同的問題。與 SSLlabs 檢查時ssllabs 檢查器它能夠取得網域 2 憑證詳細資訊以及網域 1。
如果我使用 SSLlabs 檢查domain2,它將獲取同一伺服器中的任何其他網域憑證。 (但如果存在網域 A、B、C、D,則其中一個網域 SSL 檢查將只取得一個憑證。這不是問題,所有其他網域都會有此問題。)
附截圖。 (長整頁螢幕截圖)。我認為這會澄清這個案子:(
**我無法在應用程式中使用不安全的 Curl 請求,這會忽略此問題並使curl 請求成功。如果有人對此有想法請幫忙。我在這背後花了很多時間,仍然...
上述問題是針對 Wordpress 外掛程式的,因此無法隨curl 新增特定參數。 (來自WP核心)
提前致謝。
答案1
使用的curl版本似乎缺少基本的神經網路研究所支持。當多個具有 SSL 的網域託管在同一 IP 位址上時,SNI 是必要的。
您基本上有三個選擇:
- 將curl更新到支援SNI的版本。
對此的支持是7.18.1版本中引入。 - 在您的用戶端上自行新增主機參數:
-H "Host: domain1.com"
- 移動域以使用不同的 IP 位址。這樣就無需對客戶端進行任何更改。