ruby SSL模式标志-证书验证:是否安全用途:无?

aiazj4mn  于 2022-11-22  发布在  Ruby
关注(0)|答案(1)|浏览(130)

我正在使用Savon和HTTPi编写一个基于SSL的soap请求,这两个客户端分别是Ruby soap客户端和Ruby HTTP客户端的接口。

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验证对等端)
  • :如果没有对等端证书则失败(SSL验证如果没有对等端证书则失败)
  • 客户端验证

如果我将验证模式更改为上述任何其他模式,则会出现以下错误:

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)函数进行检查。无论验证结果如何,握手都将继续
我应该担心它吗?我应该把验证模式:无看作是危险的事情吗?
我这么问是因为我不能让它和其他的验证模式一起工作,我想释放soap request over SSL功能,就像它现在的工作方式一样。但是如果那样做有危险的话,我肯定不会这么做。

lb3vh1jj

lb3vh1jj1#

**将验证模式设置为:none(SSL_VERIFY_NONE)是不安全的。**这会使代码容易受到中间人攻击。使用:none时,将没有服务器身份验证。如果攻击者拦截了来自我的客户端的连接,我的客户端将无法检测到差异,并将通过此套接字通信的任何敏感数据提供给攻击者。

模式标志:fail_if_not_peer_cert:client_once仅用于服务器;对客户端没有任何意义,它会忽略它们。
对于客户端用途,:peer(SSL_VERIFY_PEER)是唯一重要的。为了使用:peer,我需要客户端信任存储区中的证书使用根证书。
非常感谢来自OpenSSL用户支持邮件列表的Dave Thompson。在我加入这个列表后,我终于得到了帮助。

相关问题