![OpenSSL隨機無法驗證443連接埠上的URL的憑證鏈可以驗證所有實例端口](https://rvso.com/image/756808/OpenSSL%E9%9A%A8%E6%A9%9F%E7%84%A1%E6%B3%95%E9%A9%97%E8%AD%89443%E9%80%A3%E6%8E%A5%E5%9F%A0%E4%B8%8A%E7%9A%84URL%E7%9A%84%E6%86%91%E8%AD%89%E9%8F%88%E5%8F%AF%E4%BB%A5%E9%A9%97%E8%AD%89%E6%89%80%E6%9C%89%E5%AF%A6%E4%BE%8B%E7%AB%AF%E5%8F%A3.png)
我希望有人能幫助我,因為我很茫然。我的團隊一直面臨服務中缺少中間證書的問題。我的任務是編寫一個腳本,不斷地一一測試我們所有的高流量服務 URL,以驗證憑證鏈是否完整。我編寫了一個運行 OpenSSL 並解析輸出的 C# 程式。這是我在每個 url 上執行的 OpenSSL 命令:
"openssl.exe s_client -showcerts -servername " + uri + " -verify_hostname " + uri + " -connect " + uri +":" + port
或者
openssl.exe s_client -showcerts -servername www.euro-example-01.com -verify_hostname www.euro-example-01.com -connect www.euro-example-01.com:443
連接埠預設為 443,並且 99% 的時間都在使用。如果 OpenSSL 返回“Verify return code: 21 (unable to verify the first certificate)”
,我就會知道缺少中間證書,並且會觸發警報。另外,OpenSSL 會輸出鏈供我驗證這一點。這在針對 incomplete-chain.badssl.com 等網站進行測試時有效。
它現在在雲端持續運行,偶爾會發出警報。然而,很多時候我們的服務工程師會使用實例連接埠檢查失敗 URL 的每個伺服器,我們會發現0 例失敗。我們使用循環負載平衡,因此我們不應該期望這些單獨的伺服器中至少有一台會導致 443 失敗嗎? :443 失敗案例中的 OpenSSL 日誌僅顯示鏈中的一個證書,並且 SSLLabs 等網站也確認了缺少的中間證書。
如果我們的工程師重新啟動有問題的端點,那麼就會找到完整的鏈,並且丟失中間體的警報就會消失。
也許最奇怪的部分是我設定了一個單獨的腳本來測試 4 個 URL,而不是所有大約 160 個不同的 URL。昨天,在 30 分鐘的時間內,euro-example-01.com:443
對原始腳本進行了 12 次測試,其中 6 次未通過。在同樣的 30 分鐘內,對新的、較小的測試大小腳本euro-example-01.com:443
進行了 12 次測試,並全部通過了 12 次。可能這兩個腳本只是訪問了不同的伺服器,但對我來說這似乎很可疑。
正如我所說,我們不知道為什麼會發生這種情況。我讓我們的服務工程師檢查了負載平衡器,他們說它工作正常。我們還沒有找到任何導致測試開始失敗的模式。你們有人知道為什麼會發生這種情況嗎?或者,當我們使用 :443 進行測試時,有沒有辦法知道哪個實例連接埠被命中?我們可能需要更改為在實例連接埠而不是 :443 上進行測試,但我們的實例計數會定期更改,而且數量很多。
預先感謝您提供的任何幫助!
太長了;博士:我們的 URL 上的 443 連接埠不會傳回中間證書,但是當我們檢查該 URL 的各個伺服器時,總是會找到中間證書。