connect:SSL_connect返回= 1 errno = 0 state = SSLv3读取服务器证书B:证书validation失败(OpenSSL :: SSL :: SSLError)
我很难获得SSL来validation证书。 我完全不了解证书的运作方式,因此这是一个很大的障碍。 这是运行脚本时出现的错误:
c:/Ruby191/lib/ruby/1.9.1/net/http.rb:611:in `connect': SSL_connect returned=1 e rrno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL ::SSL::SSLError)
这是相关的代码:
client = Savon::Client.new order_svc request = client.create_empty_cart { |soap, http| http.auth.ssl.cert_file = 'mycert.crt' http.auth.ssl.verify_mode = :none http.read_timeout = 90 http.open_timeout = 90 http.headers = { "Content-Length" => "0", "Connection" => "Keep-Alive" } soap.namespaces["xmlns:open"] = "http://schemas.datacontract.org/2004/07/Namespace" soap.body = { "wsdl:brand" => brand, "wsdl:parnter" => [ {"open:catalogName" => catalogName, "open:partnerId" => partnerId } ] }.to_soap_xml }
任何帮助表示赞赏。
检查你的cert.pem和你的key.pem
cert密钥应该有一个
-----BEGIN CERTIFICATE----- MIIFGDCCBACgAwIBAgIKG1DIagAAAAAAAzANBgkqhkiG9w0BAQsFADCBvDEkMCIG .... -----END CERTIFICATE-----
你的key.pem应该有
-----BEGIN PRIVATE KEY----- CSqGSIb3DQEJARYVY2Fjb250YWN0QGVzY3JlZW4uY29tMQswCQYDVQQGEwJVUzEP .... -----END PRIVATE KEY-----
它可能有一些证书,但对于这种情况无关紧要。 (虽然它对我来说是因为curl在没有额外证书的情况下不起作用)我正在谈论的web服务有一个很好的根CA,但客户端auth密钥不受信任,所以这可能是额外的证书使curl工作的原因。
从客户证书中获取这些是导致我出现问题的原因。
这对我有用。
openssl pkcs12 -in Client.pfx -clcerts -nokeys -out cert.pem openssl pkcs12 -in Client.pfx -nodes -out key.pem
每个都会提示您输入导入密码,如果需要,您可以设置pem密码。 (你必须稍后在ruby代码中设置它)
require 'savon' client = Savon::Client.new "https://service/Service.asmx?wsdl" client.http.auth.ssl.cert_key_file = "key.pem" client.http.auth.ssl.cert_file = "cert.pem" client.http.auth.ssl.verify_mode=:peer p client.wsdl.soap_actions
你也可以用curl测试
curl -v -E key.pem https://services/Service.asmx?wsdl
您需要提供随证书一起提供的私钥文件。
http.auth.ssl.cert_key_file = "mycert.pem"
如果您的私钥文件已加密,您还需要提供密码:
http.auth.ssl.cert_key_password = "foobar"
将http.auth.ssl.verify_mode = :none
放在client.request
块中对我来说不起作用。
我不得不使用:
client = Savon::Client.new do |wsdl, http| http.auth.ssl.verify_mode = :none wsdl.document = #YOUR_WSDL_URL_HERE end
使用Savon 0.9.9和Ruby 1.9.3-p125
注意:我正在低级环境中使用测试自动化,这些环境没有正确签名的证书,并且由于域签名不匹配而经常会出错。 对于手头的问题,绕过签名是一个合理的解决方案,但它不是用于生产级别开发的解决方案。
我的问题是我正在尝试validation自签名证书。 我所要做的就是放下以下代码,省略与validation证书有关的任何事情。
我必须为我遇到同样问题的SOAP和REST调用执行此操作。
使用Savon的SOAP
client = Savon::Client.new order_svc request = client.create_empty_cart { |soap, http| http.auth.ssl.verify_mode = :none http.headers = { "Content-Length" => "0", "Connection" => "Keep-Alive" } soap.namespaces["xmlns:open"] = "http://schemas.datacontract.org/2004/07/Namespace" soap.body = { "wsdl:brand" => brand, "wsdl:parnter" => [ {"open:catalogName" => catalogName, "open:partnerId" => partnerId } ] }.to_soap_xml }
使用HTTPClient的REST
client = HTTPClient.new client.ssl_config.verify_mode=(OpenSSL::SSL::VERIFY_NONE) resp = client.get(Methods)
- 如何解决OpenSSL :: Cipher :: Cipher#encrypt的弃用警告
- 如何判断RVM安装的ruby实际上正在使用哪个openssl lib
- 使用任何东西在Ruby中的Objective-C / Decrypt中加密
- 如何在ruby中重构OpenSSL pkcs5_keyivgen?
- 使用openssl.so的Rails LoadError:未定义的符号:d2i_ECPKParameters
- 已经在jruby-openssl中初始化了常量
- 如何以编程方式检查证书是否已被撤销?
- OpenSSL :: SSL :: SSLError:hostname与服务器证书不匹配
- 无法在OSX上运行带有RVM的Ruby 2.2.3