RestClient.get返回证书validation失败

我正在使用RestClient和Ruby v.2.2.1尝试使用内部测试API服务器。

这基本上是代码:

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) 

如果我正确阅读,看起来Ruby无法接受SSL安全证书。 此调用适用于Chrome应用Postman,但为了使其正常工作,我必须点击Chrome中的url并接受连接不安全(但仍然继续),然后它将在邮递员中工作。

有没有办法忽略证书失败并继续在Ruby中继续?

尝试使用#execute(&block)verify_ssl设置为false

:verify_ssl启用sslvalidation,可能的值是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

这个关于Github的讨论终于给出了解决方案:不知何故RVM附带了一个预编译版本的ruby,它与openssl静态链接,查看/etc/openssl的证书。

你想做的不是使用任何预编译的ruby,而是在本地机器上编译ruby,如下所示: rvm install 2.2.0 --disable-binary

默认情况下, rest-client在所有平台上使用系统的CA存储validation证书。 但是可以将选项设置为false :verify_ssl或指定:ssl_ca_file:ssl_ca_path:ssl_cert_store以自定义接受的证书颁发机构。

见文档

所以你可以简单地设置: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