我正在使用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中继续?
答案 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
来自定义接受的证书颁发机构。
所以你可以简单地将: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