2016-07-07 171 views
4

我正在嘗試使用RestClient和Ruby v.2.2.1命中內部測試API服務器。RestClient.get返回證書驗證失敗

這基本上是代碼:

url = "https://10.10.0.10/thing/i/want/to/get" 
header = { 
     :content_type => "application/json", 
     :"x-auth-token" => "testingtoken" 
    } 
response = RestClient.get url, header 

這是失敗的消息,我得到:

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (RestClient::SSLCertificateNotVerified) 

如果我讀這個權利,它看起來像紅寶石不能接受SSL安全證書。此調用適用於Chrome應用郵遞員,但爲了使其正常工作,我必須在Chrome本身中輸入網址,並接受連接不安全(但無論如何繼續),然後在郵遞員中工作。

有沒有辦法忽略證書失敗並繼續在Ruby中繼續?

+0

的可能的複製[返回= 1個錯誤號= 0狀態的SSLv3 = SSL \ _connect讀取服務器證書B:證書驗證失敗(http://stackoverflow.com/questions/4528101/ssl-connect-returned- 1-errno-0-state-sslv3-read-server-certificate -b-certificat) – user1875195

回答

5

嘗試使用#execute(&block)並將verify_ssl設置爲false

:verify_ssl啓用SSL的驗證,可能的值是常數 從OpenSSL::SSL::VERIFY_*,默認爲OpenSSL::SSL::VERIFY_PEER

url = "https://10.10.0.10/thing/i/want/to/get" 
headers = { 
    :content_type => "application/json", 
    :"x-auth-token" => "testingtoken" 
} 

RestClient::Request.execute(
    :url => url, 
    :method => :get, 
    :headers => headers, 
    :verify_ssl => false 
) 

見:http://www.rubydoc.info/github/rest-client/rest-client/RestClient/Request#execute-instance_method


RVM

從RVM用戶

其他解決方案:https://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html

discussion on Github終於放棄瞭解決方案:不知怎的,RVM自帶 紅寶石的預編譯的版本是針對 靜態鏈接,看起來到/etc/openssl它是一個OpenSSL的證書。

你想做的事是不使用任何預編譯的紅寶石和 寧願紅寶石在本地機器上編譯,就像這樣: rvm install 2.2.0 --disable-binary

+1

太好了!謝謝你的幫助! – kroe761

+0

您的第一個解決方案是一個不安全的解決方法,並且破壞了擁有SSL證書的目的。 –

0

rest-client使用在所有平臺上的系統的CA存儲驗證證書默認。但可以將選項:verify_ssl設置爲false或指定:ssl_ca_file:ssl_ca_path:ssl_cert_store來自定義接受的認證中心。

documentation

所以,你可以簡單地設置:verify_ssl爲false:

url = "https://10.10.0.10/thing/i/want/to/get" 
header = { 
     :content_type => "application/json", 
     :"x-auth-token" => "testingtoken" 
} 
resource = RestClient::Resource.new(
    url, 
    headers: header, 
    verify_ssl: false 
) 

response = resource.get 

你可以與使用自簽名認證通過https://badssl.com/提供主機立即嘗試。只需在您的irb控制檯中複製下面的代碼片段即可。

response = RestClient::Resource.new(
'https://self-signed.badssl.com/', 
    :verify_ssl => false 
).get 
+0

您的解決方案是一種不安全的解決方法。 –

相關問題