【问题标题】:Security consequences of disabling CURLOPT_SSL_VERIFYHOST (libcurl/openssl)禁用 CURLOPT_SSL_VERIFYHOST (libcurl/openssl) 的安全后果
【发布时间】:2012-11-24 07:46:06
【问题描述】:

启用 CURLOPT_SSL_VERIFYPEER 和禁用 CURLOPT_SSL_VERIFYHOST 的安全后果是什么?

【问题讨论】:

    标签: ssl curl openssl ssl-certificate libcurl


    【解决方案1】:

    为了将其与现实生活中的场景进行比较,VERIFYPEER 就像检查 ID 的形式是否是您认可的形式(即您信任的国家/地区的护照、您认识的公司的员工卡……)。 VERIFYHOST 就像检查卡片上的实际姓名是否匹配您想与之交谈的人。

    如果您不使用 VERIFYHOST(正确的值是 2,而不是 1,顺便说一句),您将禁用主机名验证并为 MITM 攻击打开大门:任何拥有您信任的 ID 形式的人都可以冒充集合中的任何人您信任的 ID,例如任何持有有效护照的人都可以假装自己是持有有效护照的其他人。

    【讨论】:

    • 感谢您详细的回答。这让我想到了另一个简单的问题:我得到了一个带有有效 SSL 证书的网站 https://www.example.com(应该是 cn=www.example.com)。当我通过它的 IP 地址访问该网站时,它会显示证书错误(因为 cn 不匹配),删除 SSL_VERIFYHOST 将解决它,但会打开它以受到 MiTM 攻击。处理此问题的正确解决方案是什么? (允许通过 IP 地址连接而不显示错误)。仅使用 CURLOPT_SSL_CTX_FUNCTION 替换整个验证方法来验证特定 IP 地址是否与 CN 匹配?
    • 为什么要使用 IP 地址连接?它是来自您自己的 CA(或自签名)的证书吗?
    • 我有 2 个服务器(1.1.1.1 和 2.2.2.2),example.com 的 DNS 包含 2 个 A 记录(这些 ip 地址)。客户端随机选择其中之一并连接到 IP 地址而不是主机名。我希望 openSSL 在检查公用名字段时给我打电话,以便我可以将证书公用名与 example.com 进行比较,如果可以,我将接受证书。我还没有看到 libcurl 支持它,所以我假设我必须编写自己的实现。 example.com 的证书是受信任的 Verisign 证书。
    猜你喜欢
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多