【问题标题】:SSL mode flags - verification of certificates: is it safe to use :none?SSL 模式标志 - 证书验证:使用 :none 是否安全?
【发布时间】: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请求。但如果这会很危险,我肯定不会这样做。

【问题讨论】:

    标签: ruby soap ssl savon httpi


    【解决方案1】:

    一段时间后,我加入了 OpenSSL 用户支持邮件列表,终于得到了帮助。

    简而言之:

    模式标志 :fail_if_not_peer_cert 和 :client_once 仅用于服务器,对客户端没有任何意义,因此它们在客户端被忽略。

    对于客户端而言,:peer (SSL_VERIFY_PEER) 是唯一的问题。

    并且将验证模式设置为 :none (SSL_VERIFY_NONE) 是不安全的。这样,将不会有服务器身份验证。如果有人拦截了来自我客户端的连接,我的客户端将无法检测到差异,并将敏感数据提供给攻击者。

    为了使用:peer,我需要在客户端trustedstore中拥有证书。

    非常感谢来自 OpenSSL 邮件列表的 Dave Thompson。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 2013-10-20
      • 2016-08-24
      • 2020-10-12
      • 2010-11-08
      • 2019-06-14
      • 1970-01-01
      相关资源
      最近更新 更多