我正在使用 Savon 和 HTTPi(分别是 Ruby 肥皂客户端和 Ruby HTTP 客户端的接口)通过 SSL 编写肥皂请求。这是代码:
client = Savon::Client.new(original_class.constantize.wsdl_url)
client.http.auth.ssl.cert_key_file = "path_to_the_key"
client.http.auth.ssl.cert_key_password = 'secret'
client.http.auth.ssl.cert_file = "path_to_the_certification"
client.http.auth.ssl.verify_mode = :none
@response = client.request :ins0, action do
soap.body = encoded_body
end
这是我让它工作的唯一方法。但是,我知道还有其他三种验证模式,它们是:
- :peer (SSL_VERIFY_PEER)
- :fail_if_no_peer_cert (SSL_VERIFY_FAIL_IF_NO_PEER_CERT)
- :client_once (SSL_VERIFY_CLIENT_ONCE)
如果我将验证模式更改为上述任何其他模式,我会收到此错误:
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
然后是我的问题(其中包括我的问题):
- 如果我将验证模式保持为:none,我做错了吗?是否缺乏安全感?
- 错误的真正含义是什么?我的代码是错误的还是我的证书(这是自分配的——我在开发环境中)不好?
我阅读了有关验证模式的 OpenSSL 文档:
http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html
关于客户端模式下的 SSL_VERIFY_NONE 说:
在 TLS/SSL 握手之后,可以使用 SSL_get_verify_result(3) 函数检查证书验证过程的结果。无论验证结果如何,都会继续握手。
我应该担心吗?我应该将验证模式 :none 视为危险的事情吗?
我之所以这么问,是因为我无法使其与其他验证模式一起使用,因此我想以现在的工作方式通过 SSL 功能释放肥皂请求。但如果这可能很危险,我肯定不会这样做。