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

2024-03-09

Question

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

我浏览了 PyOpenSSL 文档,似乎找不到任何关于如何与建立 SSL 连接分开验证证书的信息。

我找到了参考OpenSSL.crypto:X509.verify() in twisted.internet._sslverify:PublicKey.verifyCertificate(),但是twisted方法被注释掉了(在Twisted 13.0中)并且X509方法不存在(在PyOpenSSL 0.13中)。

pyOpenSSL 不支持验证证书 https://bugs.launchpad.net/pyopenssl/+bug/892522描述了无法手动验证证书链的错误,但我不完全确定这是否是我想要做的。

Use Case

证书:

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

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

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

Setup:

  • 服务器正在使用 Twisted 的证书选项 http://twistedmatrix.com/documents/current/api/twisted.internet.ssl.CertificateOptions.html及其服务器证书。 CA 证书是 CA 和服务器证书,用于设置一个链,其中服务器证书验证收到的客户端证书,CA 证书验证服务器证书(所有内置功能)。

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

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

  • 在客户端设置验证() http://pyopenssl.sourceforge.net/pyOpenSSL.html/openssl-context.html#l2h-141回调,验证客户端证书是否由服务器证书签名。

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

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

在实践中,我无法完成该部分,我认为原因如下:https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html

总之,即使到了 2016 年,PyOpenSSL 中似乎仍然没有正确的等待检查证书的情况,这是非常令人难过的。请注意,共识似乎是,如果您在 TLS 连接内进行操作,则最好通过连接例程进行检查,而不是通过离线进行检查check_certificate()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

验证 SSL/X.509 证书是否由另一个证书签名 的相关文章

随机推荐

  • img 元素上的 HTML 宽度/高度属性和 CSS 宽度/高度属性有什么区别?

    超文本标记语言 img 元素可以有width height属性 也可以有CSSwidth height特性 img src xxx img width 16 height 16 style width 16px height 16px HT
  • 我无法从数据库中检索图像

    我有一个包含电影名称 描述和封面图片的数据库 封面图片字段类型为 blob 问题是我无法从数据库中检索它 我想在他们旁边的封面图片上显示电影名称 如何做到这一点 这是我的代码 table border 1 width 100 tr td t
  • Perl 中的“字符串化”是什么?

    在 CPAN 模块的文档中DateTime http search cpan org drolsky DateTime 0 66 lib DateTime pm Formatters And Stringification我发现了以下内容
  • 在 Swift 中子类化 UINavigationBar

    我正在尝试创建一个自定义UINavigationBar类 然后使用Storyboard将其设置为我的班级UINavigationController的导航栏 这是我的代码UINavigationBar class class CustomN
  • 使用外部服务的 Shopify 自定义搜索

    我的情况 我们有一个 Shopify 商店 我们还有一个在 AWS 上实施和托管的搜索引擎 我们需要使用该搜索引擎而不是 Shopify 商店中的默认 search 理想情况下 当用户尝试搜索某些内容时 他们的查询 以及可能的其他内容 例如
  • C++ 静态变量总是在主线程上被破坏吗?

    简短的问题 C 11 静态 非线程本地 变量是否总是在主线程上分散注意力 它们是否总是仅在程序退出时被销毁 考虑到我们不手动调用它们的析构函数 UPDATE 为了简洁起见 我们假设调用了析构函数 我们没有拔掉插头 我们没有杀死 9 全局对象
  • 使用“Runtime.getRuntime().exec”从 Java 启动的进程无法访问文件系统位置

    从 Java 启动的进程Runtime getRuntime exec权限较少 我在 JavaDocs 中没有看到对此的描述以及如何管理它 如何保证启动的进程具有相同的环境和权限 更多细节 编写轻量级 Eclipse 插件maven htt
  • 安全 Rust 中的转换会导致运行时错误吗?

    我正在摆弄一点Any和铸造只是为了更深入地了解 Rust 从 C 开始 我已经习惯了强制转换可能导致运行时异常 因为在 C 中强制转换基本上意味着亲爱的编译器 相信我 我知道我在做什么 请将其转换为int32因为我知道它会起作用 但是 如果
  • R中的正态分布图[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试使用plot命令在r中绘制正态分布 plot x dnorm x mean sd 使用我的平均值和标准差值 然而 使用这些值 y
  • 从 C# 调用 NetValidatePasswordPolicy 始终返回密码必须更改

    我们有一个使用 Active Directory 来验证用户身份的 mvc 应用程序 我们正在利用System DirectoryServices并使用PricipalContext验证 principalContext ValidateC
  • 如何在 OS 10.6 (Snow Leopard) 上解决此 PostgreSQL 错误

    我按照以下说明设置 postgresql这个网站 http www robbyonrails com articles 2010 02 08 installing ruby on rails passenger postgresql mys
  • 输入图像中的通道数无效

    我在运行程序时收到错误 我特别考虑了 OpenCV 库中的颜色操作 我正在尝试构建一个程序 从 Raspberry Pi 摄像头获取视频并对其进行分析 我想找到视频中最亮的点 并计算该点距视频源中心的距离和角度 我正在做的项目将相机指向一个
  • GTK焦点链

    Currently I m working on a pyGTK3 application for which I want to set the focus chain When using the code below simplifi
  • 将一个系列分配给 Pandas DataFrame 的几行

    我有一个用索引和列准备的 pandas DataFrame 所有值都是 NaN 现在我计算了一个结果 该结果可用于 DataFrame 的多行 并且我想一次将它们全部分配 这可以通过循环来完成 但我很确定这个分配可以一次完成 这是一个场景
  • 如何在给定解决方案中评估在与用于生成上述解决方案的模型不同的模型中声明的谓词

    假设我们有两个模块A和B A在B中打开 您从 A 生成一个解决方案 并在 B 中有一些参数化谓词 这些谓词仅对 A 的元素进行推理 但由于某些原因 您不能将这些谓词放入模块 A 中 如何在 A 生成的解决方案中评估 B 中声明的谓词 以下是
  • 未找到与团队 ID“*****”和私钥匹配的“iOS 开发”签名证书

    我已经创建了一个新的配置开发证书 但 xcode 不接受它 并显示错误 找不到与团队 ID 匹配的 iOS Development 签名证书和私钥 如何解决这个错误 有时 即使您有有效的证书 Xcode 也会抛出此错误 这是因为您的帐户以某
  • 如何以二进制形式打印长整型?

    我正在尝试以二进制形式打印 Long 但它总是被切断0的 有没有办法强制它显示所有位 这是我的代码 long l 1 System out println Long toBinaryString long l 仅按提及的方式返回1由于删除了
  • 无法找到属性 - 从 NHibernate 3 切换到 3.3.1 后出现异常

    我有一个带有字段的类 protected DateTime insertDate 这是该字段的映射
  • 最佳拟合散点图线

    我正在尝试在 matlab 中用最适合的线绘制散点图 我可以使用 scatter x1 x2 或 scatterplot x1 x2 获得散点图 但基本拟合选项被遮蔽并且 lsline 返回错误 未找到允许的线型 什么也没做 任何帮助都会很
  • 验证 SSL/X.509 证书是否由另一个证书签名

    Question 如何使用 PyOpenSSL 或 Twisted 验证 X 509 证书是否由另一个证书签名 我希望客户端验证收到的服务器证书是否是签署其客户端证书的证书 我浏览了 PyOpenSSL 文档 似乎找不到任何关于如何与建立