【问题标题】:How to verify SSL certificates without root certificate in Python?如何在 Python 中验证没有根证书的 SSL 证书?
【发布时间】:2017-06-14 21:29:58
【问题描述】:

我想验证在根 CA 证书和服务器证书之间具有中间证书的服务器的 SSL 证书。

如果尝试了“请求”和“httplib”包来验证证书,并且如果我提供根证书的路径(或在“请求”的情况下更新“REQUESTS_CA_BUNDLE”环境变量),则两者都成功。

但是,如果我只提供服务器证书或中间证书的路径,验证将失败。我想知道“请求”或“httplib”或 Python 中的任何其他包是否有任何方法可以仅使用服务器或中间 CA 证书成功验证 SSL 证书,而无需尝试回溯到根 CA 证书?

如果使用 Python 很棘手,openssl 或类似的 linux 工具是否允许相同?

【问题讨论】:

    标签: python ssl https openssl pyopenssl


    【解决方案1】:

    如何在 Python 中验证没有根证书的 SSL 证书?

    您可以使用其中一个从属 CA 而不是根 CA 来验证证书链。这称为路径构建,有一个RFC that covers the technique

    您也可以直接使用终端实体服务器证书。只需将您的信任植根于它,而不是根 CA 或从属 CA。

    如果您不能使用根 CA 或从属 CA,那么您必须转到另一个方案。


    这并不能直接回答您的问题...您可以做的一件事是pin the host's public key,放弃整个 PKI 或 PKIX 机制。

    key distribution problem 仍然适用,没有办法回避它。在 PKIX 中,您需要 CA 的根证书。固定时,您需要知道主机的公钥。

    如果您先验了解主机的公钥,那么您可以转到Trust On First Use 方案。它类似于CertPatrol 等工具的工作方式。

    固定适用于企业应用程序。在企业中,组织发行自己的证书,因此它事先知道公钥是什么。他们甚至可以运行自己的私有 PKI。由于组织先验知道这些信息,因此构建应用时捆绑了必要的证书。首次使用时无需信任。

    一个重要提示...RFC 7469, Public Key Pinning Extension for HTTP,存在严重缺陷。最具破坏性的是(1)覆盖,攻击者可以破坏已知良好的引脚组; (2) 当引脚组损坏时,错误报告被禁用。 RFC 在列出安全注意事项方面做得不好。

    另请参阅 Peter Gutmann 的 Engineering Security。他讨论了所有这些东西。


    如果尝试过 'requests' 和 'httplib' 包...

    不幸的是,我不知道你需要哪个库来做这些事情。可能没有可用的库。

    【讨论】:

    • 我现在不能接受你的答案作为答案,主要是因为你提到的很多事情我知之甚少,所以我需要一些时间才能尝试你的建议。但对于所有有价值的建议,我绝对赞成你的回答。谢谢你:)
    • @akash12300 - 别担心。你陷入了深层次的安全工程问题。阅读古特曼的书。并且不要太快接受答案。让人们有时间回答。你可能会发现一个更好的出现。
    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2017-06-13
    • 2019-03-29
    • 2018-12-25
    • 2010-11-08
    • 1970-01-01
    相关资源
    最近更新 更多