2016-07-07 140 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

您的解决方案是一种不安全的解决方法。 –

相关问题