RestClient.get返回证书验证失败

时间:2016-07-07 20:53:20

标签: ruby ssl rest-client

我正在使用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本身的网址并接受连接不安全(但仍然继续),然后它将在邮递员中工作。

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

2 个答案:

答案 0 :(得分:6)

尝试使用#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

来自https://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html

的RVM用户的其他解决方案
  

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

     

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

答案 1 :(得分: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