Ssl-Certificate

SSL 證書在 chrome 中工作,但不能在 openssl s_client 或 curl 中工作

  • April 29, 2017

幾天前,Google chromes 更新到 58 版開始使我的自簽名證書失效。它在抱怨失踪subjectAltNames。我做了一些研究並嘗試了一些建議(這不起作用),但後來發現了這篇文章,這是我唯一可以工作的。

還是我?

Yay chrome 現在正在接受我新生成和導入的證書,我正在路上,

直到,我在我的PHP網路應用程序中點擊了一個頁面,該頁面需要從同一開發機器上的另一個微網路服務載入數據。

stream_socket_client():SSL 操作失敗,程式碼為 1。OpenSSL 錯誤消息:錯誤:14090086:SSL 常式:ssl3_get_server_certificate:

我已經在Google上搜尋和修改了大約 4 個小時,但我無法理解它。

問題

為什麼 chrome 接受我的證書。但是工具之類curl的,openssl s_client都給我unable to verify the first certificate還是invalid certificate?我嘗試將證書作為參數傳遞,但顯然仍然無效。

使用 curl 和 openssl 調試將證書文件作為參數傳遞繼續給我這個錯誤

SSL 證書驗證結果:無法獲取本地頒發者證書(20),

我想我會在一天結束時完全禿頂。

筆記

  • 虛擬機是我的本地開發環境,所以我確實有多個域具有自己的證書和密鑰
  • 虛擬機位於 IP 192.168.33.10。意味著 chrome 沒有訪問本地主機。然而 curl 和 openssl s_clinet 正在嘗試訪問 locahost
  • 伺服器是執行 ubuntu 14.04 的虛擬機
  • 使用 MMC(Microsoft 管理控制台)在主機上安裝自簽名證書
  • 錯誤肯定來自嘗試訪問 Web 服務的客戶端類。
  • 我嘗試將證書作為參數傳遞,但顯然仍然無效。
  • 我完全知道我可以將 verify peer 設置為 false 或將 –insecure 傳遞給請求,但我沒有從中學到任何東西。
  • SSL 會話:協議:TLSv1.2
  • 跑去sudo dpkg-reconfigure ca-certificates更新證書
  • 跑了sudo update_ca_ccertificates
  • 我已經達到挫敗等級9000

恢復更新

我重新生成了一個關閉 v3 擴展的新證書,並且 Back to chrome 告訴我subjectAltName失去但 curl 正在工作。我需要弄清楚如何生成 curl 和 chrome 都可以接受的證書。

找到了一個更清晰的教程,它的openssl.conf. 在我最初添加 s 的嘗試中,SAN我必須在 conf 中有未註釋的額外行,這些行嚮導致衝突的證書添加額外資訊。遵循此模板,我的證書全面有效:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = MN
localityName = Locality Name (eg, city)
localityName_default = Minneapolis
organizationalUnitName  = Organizational Unit Name (eg, section)
organizationalUnitName_default  = Domain Control Validated
commonName = Internet Widgits Ltd
commonName_max  = 64

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = kb.example.com
DNS.2 = helpdesk.example.org
DNS.3 = systems.example.net
IP.1 = 192.168.1.1
IP.2 = 192.168.69.14

感謝您的評論@garethTheRed。您的評論幫助我重新思考了調試此問題的方法。

即使在這裡開始發帖也可以幫助我列出我嘗試過的內容,並幫助大腦想出更多可能的解決方案。

引用自:https://serverfault.com/questions/847302