首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证SSL/X.509证书由另一个证书签名

验证SSL/X.509证书由另一个证书签名
EN

Stack Overflow用户
提问于 2013-09-09 15:26:32
回答 1查看 2.9K关注 0票数 2

问题

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

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

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

pyOpenSSL不支持验证证书。描述了一个无法手动验证证书链的错误,但我不完全确定这是否是我所要做的。

用例

证书:

  • 使用openssl生成自签名CA证书。
  • 由CA证书签名的生成服务器证书。
  • 由服务器证书签名的生成客户端证书。

设置:

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

这一切都很好(双方相互验证),但我想执行一个额外的步骤:

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

回答 1

Stack Overflow用户

发布于 2017-10-12 15:12:40

您应该能够在这里编写这样的内容:http://www.yothenberg.com/validate-x509-certificate-in-python/,它基本上是:

  1. 在PyOpenSSL中用load_certificate()加载证书
  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()脱机检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18701737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档