gpt4 book ai didi

python - 验证 SSL/X.509 证书是否由另一个证书签名

转载 作者:太空宇宙 更新时间:2023-11-03 13:08:12 25 4
gpt4 key购买 nike

问题

如何使用 PyOpenSSL 或 Twisted 验证 X.509 证书是否由另一个证书签名?我希望客户端验证收到的服务器证书是签署其客户端证书的证书。

我查看了 PyOpenSSL 文档,但似乎找不到任何关于如何与建立 SSL 连接分开验证证书的内容。

我在 twisted.internet._sslverify:PublicKey.verifyCertificate() 中找到了对 OpenSSL.crypto:X509.verify() 的引用,但是扭曲的方法被注释了out(在 Twisted 13.0 中)并且 X509 方法不存在(在 PyOpenSSL 0.13 中)。

pyOpenSSL has no support for verifying a certificate描述了一个无法手动验证证书链的错误,但我不完全确定这是否是我正在尝试做的。

用例

证书:

  • 使用 openssl 生成自签名 CA 证书。

  • 生成由 CA 证书签名的服务器证书。

  • 生成由服务器证书签名的客户端证书。

设置:

  • 服务器正在使用 Twisted 的 CertificateOptions及其服务器证书。 CA 证书是用于设置链的 CA 和服务器证书,其中服务器证书验证收到的客户端证书,CA 证书验证服务器证书(所有内置功能)。

  • 客户端还使用 CertificateOptions 作为客户端证书。 CA 证书仅包含 CA 证书。

一切正常(双方相互验证)但我想执行额外的步骤:

  • 在客户端set_verify()回调,验证客户端证书是否由服务器证书签名。

最佳答案

你应该可以用这里写的这样的东西来做到这一点: http://www.yothenberg.com/validate-x509-certificate-in-python/这基本上是:

  1. 使用 load_certificate() 在 PyOpenSSL 中加载您的证书
  2. 创建一个 X509Store() 对象
  3. 使用 add_cert() 在商店中添加您的中间证书
  4. 创建一个 X509StoreContext() 对象,使用您的存储对象和最终证书对其进行初始化
  5. 在您的商店上下文对象上调用 verify_certificate()

在实践中,我无法制作那部分,我认为这是由于此处解释的原因:https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html

简而言之,即使在2016年,PyOpenSSL中似乎仍然没有正确等待检查证书,这是非常可悲的。请注意,共识似乎是,如果您在 TLS 连接内操作,则连接例程会更好地检查事物,而不是通过 check_certificate()

离线检查

关于python - 验证 SSL/X.509 证书是否由另一个证书签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18701737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com