【发布时间】:2012-09-24 13:31:37
【问题描述】:
我正在使用 Savon 和 HTTPi(分别是 Ruby soap 客户端和 Ruby HTTP 客户端的接口)通过 SSL 编写一个 soap 请求。代码如下:
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
这是我让它工作的唯一方法。但是,我知道还有其他三种验证模式,分别是:
- :对等 (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,在客户端模式下说:
可以检查证书验证过程的结果 在使用 SSL_get_verify_result(3) 进行 TLS/SSL 握手之后 功能。 握手将继续,无论 验证结果。
我应该担心吗?我应该将验证模式 :none 视为危险吗?
我之所以这样问,是因为我无法使其与其他验证模式一起使用,因此我想以现在的工作方式通过 SSL 功能释放soap请求。但如果这会很危险,我肯定不会这样做。
【问题讨论】: