2017-05-10 76 views
0

從rails控制檯(或通常在rails環境中)運行鍼對SSL站點的get調用時,我得到SSL驗證錯誤。Rails.application.initialize後導致SSL證書驗證失敗

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed 

我跟蹤的整個Rails應用程序的初始化過程從開始到結束,從config.ru一路經過去,需要環境文件等

的SSL錯誤只有我跑Rails.application.initialize!後開始發生在config/environment.rb

我清除所有紅寶石寶石從制度和只有從Gemfile安裝的那些所以它不可能有前需要不同的寶石版/初始化過程之後。

我知道短期修復是將我的HTTPS調用設置爲不驗證其獲得的證書,但由於生產環境中存在安全問題,這是不可能的。

這個問題似乎涉及到因爲當我運行

openssl s_client -connect sub.domain.com:443 -showcerts -servername sub.domain.com 

獲得正確的CERT SNI(服務器名稱指示),但是當我運行

openssl s_client -connect sub.domain.com:443 -showcerts 

我得到一個證書sub2.domain.com這就是驗證失敗的原因。這是如何被Rails初始化進程改變的,如果有的話,是否有一個選項可以讓rails使用SNI?

  • 滑軌v4.2.5.2
  • 紅寶石2.3.3p222(2016年11月21日修訂版56859)[x86_64的Linux的]
  • OS:Fedora的25
  • CA證書-2017年2月11日-1.1.fc25_2017.2.14-1.0.fc25.noarch.drpm:done
+0

SSL。我感到你的痛苦。你看過這個工具:https://github.com/mislav/ssl-tools/blob/8b3dec4/doctor.rb - 我發現它非常有幫助(我與開發者沒有任何關係)。我也發現這個帖子特別有用:http://stackoverflow.com/questions/36966650/ruby-nethttp-responds-with-opensslsslsslerror-certificate-verify-failed/43769753#43769753。祝你好運! – jvillian

+0

謝謝,但不幸的是,這並沒有幫助,因爲這裏的問題是,如果在IRB中運行但是在rails應用程序之後,相同的調用('HTTParty.get('https:// ...')')可以正常工作初始化它會導致此SSL錯誤。 – Killerpixler

回答

0

最後,這不是一個Rails問題,而是一個google-api-client寶石問題。爲了在Windows環境下工作,我們通過初始化文件從google api gem加載cacerts.pem文件。

config/initializers/ga.rb

cert_path = Gem.loaded_specs['google-api-client'].full_gem_path+'/lib/cacerts.pem' 
ENV['SSL_CERT_FILE'] = cert_path 

這解決了CA文件

"/home/user/appname/vendor/bundle/ruby/2.3.0/gems/google-api-client-0.11.1/lib/cacerts.pem" 

而且不支持SNI由LetsEncrypt產生的SSL證書。

相關問題