2013-06-30 25 views
0

訪問https端點時,我們的生產(Heroku)和開發(本地)實例一直在工作。然而,在過去的2天后,我們開始變得可怕OpenSSL的錯誤:針對特定提供商的OpenSSL失敗?

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

我讀過通過大量的OpenSSL在計算器上和http://railsapps.github.io/openssl-certificate-verify-failed.html失敗的帖子。

我已經更新到最新的OpenSSL和運行以下爲證。

ruby -ropenssl -e 'p OpenSSL::OPENSSL_VERSION' 
"OpenSSL 1.0.1e 11 Feb 2013" 

不過,我還是收到此錯誤:

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

當我打電話hash = JSON.parse(open(_url).read)哪裏_url指向一個https端點。

訪問某些提供程序似乎沒有問題。例如,當我發出:curl -I https://d2chzxaqi4y7f8.cloudfront.net/gems/rake-0.9.2.2.gem,它似乎工作。

我也irb嘗試這樣做,它似乎工作:

require 'open-uri' 
open 'https://google.com' 
=> #<File:/var/folders/dv/s_2dq32n0ggcn65kn61jtmc80000gn/T/open-uri20130630-887-y2cg2q> 

這是不是終點提供商需要修復或與本地和生產實施OpenSSL的東西?

回答

0

證書驗證失敗表明你的Ruby實例無法找到一個方法來鏈端點的證書直至受信任的根,它是知道的。這可能是一些不同的事情:

  • 端點可能已經更改了證書提供程序,並且它們的新來源不在默認信任關係中。
  • 端點可能沒有安裝正確的中間體。
  • 端點可能有一個不受信任的證書。

爲了縮小範圍,你可以嘗試通過Web瀏覽器中加載的端點。你會得到一個不可信的錯誤嗎?如果是這樣,請聯繫您的供應商。如果沒有,您需要查看證書並查看它使用的是什麼根。然後,你會希望將該添加到受信任的證書的紅寶石名單(這取決於你如何編譯它,在什麼平臺上的不同來源)。

相關問題