簡體   English   中英

SSL_connect返回= 1 errno = 0狀態= SSLv3讀取服務器證書B:證書驗證僅在代理時失敗

[英]SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed ONLY WHEN PROXYING

這篇文章幾乎復制了許多其他帖子,包括Rails 4和Ruby 2 Net / HTTP SSL請求:OpenSSL :: SSL :: SSLError:SSL_connect返回= 1 errno = 0狀態= SSLv2 / v3讀取服務器問候A:未知協議SSL_connect返回= 1 errno = 0狀態= SSLv3讀取服務器證書B:證書驗證失敗 ,但有一個關鍵區別:“證書驗證失敗”錯誤僅在通過SSL代理( Charles )代理時發生,並且僅在最新版本中Ruby。

具體來說,這個(非代理)代碼有效:

  uri = URI.parse('https://www.ibm.com')
  http = Net::HTTP.new(uri.host, uri.port, nil)
  http.use_ssl = true
  http.start { |agent| agent.get(uri.path) }

並且此(代理)代碼因“證書驗證失敗”錯誤而失敗:

  uri = URI.parse('https://www.ibm.com')
  http = Net::HTTP.new(uri.host, uri.port, "localhost", 8888)
  http.use_ssl = true
  http.start { |agent| agent.get(uri.path) }

這個謎題

在當前版本的Ruby / OpenSSL中通過代理時,僅出現錯誤。 特別是:

  • 不通過代理時沒有錯誤,這讓我認為本地證書是有效的。
  • 使用Firefox或curl -v https://www.ibm.com/進行代理時沒有錯誤,這使我認為Charles證書是有效的。
  • 早期版本的Ruby / OpenSSL上的代理沒有錯誤(請參閱下面的兩個環境)。

所有這些讓我懷疑一個真正的Ruby bug,而不是我的證書的問題,但我很樂意以其他方式顯示。

當前的環境

我正在觀察這個環境的錯誤:

$ system_profiler SPSoftwareDataType | grep "System Version"
    System Version: OS X 10.8.5 (12F45)
$ ruby --version ; openssl version ; gem list | grep http
ruby 2.0.0p247 (2013-06-27) [x86_64-darwin12.4.0]
OpenSSL 1.0.1e 11 Feb 2013
http-cookie (1.0.2)
http_router (0.10.2)
net-http-digest_auth (1.4)
net-http-persistent (2.9)
ntlm-http (0.1.1)

以前的環境

稍微舊版本的ruby / OpenSSL不會出現該錯誤:

$ ruby --version ; openssl version ; gem list | grep http
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin10.8.0]
OpenSSL 0.9.8y 5 Feb 2013
http_router (0.11.0, 0.10.2)
httpauth (0.2.0)
net-http-digest_auth (1.2.1)
net-http-persistent (2.8)
ntlm-http (0.1.1)

這里發生的事情是Charles無法為您提供“ https://www.ibm.com ”的有效證書,因為您設置Charles的任何證書(或者如果Charles創建自己的證書),它不能用於“www.ibm.com”名稱並由受信任的證書頒發機構認證。 這就是如果客戶端驗證證書,連接失敗的原因,如果您跳過驗證,則連接失敗

http.verify_mode = OpenSSL::SSL::VERIFY_NONE

它可能適用於舊版本的ruby,因為“net / https”已經過調整,默認情況下最近才會驗證證書。

我似乎記得需要在ENV var中指出該證書。 如果你真的不關心驗證,那么更容易:

http.verify_mode = OpenSSL::SSL::VERIFY_NONE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM