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