使用 python 验证 SSL 中的对等点

2023-11-24

我试图找出如何通过 python 中的服务器验证自签名证书。我在谷歌上找不到太多数据。我还想确保服务器网址

预先感谢您的任何见解。


从我的第一个回复的评论中,我发现人们普遍误解了“验证证书的含义”。我会尝试在这里写一个简短的解释,以消除一些幻想。

证书验证是针对某些加密签名检查证书元数据上的签名(即主题、有效期、扩展名等)。

如果用于验证的只是自签名证书,则无法将其与元数据完全相同但密钥不同的另一个自签名证书区分开来,除非您事先知道密钥证书的密钥。并且不要忘记,您建立所有这些验证程序是为了消除拥有这种预先共享知识的要求。通过定期证书验证,您无法完全消除对某些预共享知识的要求,这些知识是一组第三方证书,也称为“CA 证书”。由于这些知识是预先共享的,因此这些证书可能是自签名的,但请记住,您收到的有关这些证书有效性的信息不是来自验证过程,而是来自一些外部知识。

当您在对等方之间分发一组受信任的“CA 证书”时,您可以使用这些证书来签署其他证书,并根据受信任 CA 的预共享知识检查签名。

但是,如果您除了证书本身之外没有关于自签名证书的其他知识,您就不能对这个特定证书的信任做出任何假设,因为它可能是由一些邪恶的黑客以及您值得信赖的服务器颁发的。

请您了解一些相关知识中间人攻击, 公钥基础设施 and 公钥密码学通常在实施任何类型的证书验证过程之前。

请理解,即使不考虑一般的互联网安全,即使您自己的网络中存在聪明的黑客,自签名证书的盲目验证也无法保护您。

Edit:问题作者澄清说,他实际上正在寻找如何使用 M2Crypto 绑定验证证书上的 verisign(或其他 CA)签名。下面是两个例子:

from M2Crypto import X509, SSL

# manual validation of a signature on a certificate using a given CA cert:
ca = X509.load_cert('/path/to/ca_cert.pem')
cert = X509.load_cert('certificate_to_validate.pem')
print "Verification results:", cert.verify(ca.get_pubkey())

# adding a given CA cert to the SSL Context for verification
ctx = SSL.Context()
# load a certificate from file
ctx.load_verify_locations(cafile='/path/to/ca_cert.pem') 
# or use all certificate in a CA directory
ctx.load_verify_locations(capath='/path/to/ca/dir') 
# or you can specify both options at the same time.

如果您要使用包含许多 CA 证书的目录(这通常更方便),则必须将每个证书重命名为<hash>.0 where <hash>是证书主题的哈希值(通过以下方式获得)openssl x509 -noout -hash -in cert.pem).

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

使用 python 验证 SSL 中的对等点 的相关文章

随机推荐

  • 使用 JSoup 提取图像 src

    我正在尝试使用 jsoup 从此网页中提取所有图像网址 任何人都可以提供有关如何做到这一点的帮助吗 所有标签的格式都是这样的 但我只需要 src 图像 而不是 ajaxsrc img src http image cdnllnwnl xos
  • 使用 BACK 键隐藏键盘事件

    我注意到在Android Market Application 当您单击搜索按钮时 它会显示键盘 但是当您单击back按钮 搜索EditText变得不可见并且keyboard被隐藏 问题是我无法隐藏EditText按后退键后隐藏键盘后 因为
  • Visual Studio自定义构建步骤规则?

    使用 Visual Studio 2008 当我向 C 项目添加一个不存在的文件时 c cpp h rc或者 IDE 无法识别的任何内容都会弹出一个对话框 询问我是否要为此类文件创建自定义构建步骤规则 有谁知道如何在不添加文件的情 况下进入
  • [A]如何在javafx中使MP3重复播放?

    我希望我的 mp3 文件在完成后再次重复 但我无法创建循环来重复播放我的文件 我使用了这段代码 但只有它在完成后播放我的文件的第一秒 AudioClip myMusic myMusic setCycleCount AudioClip IND
  • 代码检查 - 命名范围参考

    在 Rubberduck 2 0 11 2453 中运行代码检查后 有 4 个范围引用被标记为 成员 Range 隐式引用 ActiveSheet 有问题的范围是指命名范围 是否有必要限定命名范围引用 Private Sub RunORat
  • gcc生成目标文件时创建目录

    gcc o abc def o def c产生def o目录中的文件abc 仅当目录存在时abc 当生成的目标文件的封闭目录不存在时 有没有办法让 gcc 创建一个目录 如果没有 那么提前自动创建目录 尤其是 Makefile 的最简单方法
  • 将 rowversion 转换为 bigint

    在我的 C 程序中 我不想使用字节数组 因此我将 rowversion 数据类型转换为 bigint SELECT CAST version AS BIGINT FROM dbo mytable 所以我收到一个数字而不是字节数组 这种转换总
  • 在 sphinx 文档中包含独立的 HTML 页面

    对于我的项目的大部分文档 我更喜欢标准的 sphinx 布局 然而 对于登陆页面 我更喜欢使用自定义 HTML CSS JS 而不使用普通 sphinx 网站的任何布局 目录或侧边栏 有没有一种方法可以在 sphinx 生成的网站中包含原始
  • 自定义属性未在样式和主题内解析

    我有一个带有自定义主题的 Android 应用程序 该应用程序是 2 3 年前开发的 我有这个风格attr xml资源文件
  • 如何在同一端口 4200 上运行 Angular 4 应用程序和 NodeJS api 以进行生产和开发?

    我已经创建了 Angular 4 应用程序 我可以使用它来运行它ng serve open它运行在localhost 4200 我想要的是我还使用创建了 apinodejs现在在同一个角度项目中我想运行该 APIlocalhost 4200
  • 这个 128 位整数乘法在汇编 (x86-64) 中如何工作?

    我正在阅读计算机系统 程序员的视角作业是描述这个算法是如何工作的 C函数 void store prod int128 dest int64 t x int64 t y dest x int128 y 集会 movq rdx rax cqt
  • 如何写下 rspec 来测试救援块?

    我有这样的方法 def className def method name some code rescue some code and error message end end 那么 如何写下 rspec 来测试救援块 如果你想拯救 就
  • 从 WaitHandle.Wait 构造任务

    我选择返回Task
  • CodeIgniter - 如何检查每种方法使用的会话

    假设我的控制器名为Book 我有很多方法 比如get book read book remove book 如果没有用户登录 则无法使用类中的任何方法 我可以获得user id来自会话 我的问题是 检查是否存在的最佳方法是什么user id
  • 在 Scala 中,如何从可序列化的类型创建 TypeTag? [复制]

    这个问题在这里已经有答案了 在 Scala 反射中 通常可以使用 TypeCreator 从 Type 构造 TypeTag object TypeUtils import ScalaReflection universe def crea
  • Slim 3在中间件中获取当前路由

    我想在中间件类中获取当前 I 路由的名称 以前 在 Slim 2 中 您可以像这样获取当前路线 route this gt app gt router gt getCurrentRoute 但这个功能在Slim 3 0版本中已经被删除了 我
  • 如何尝试多个 SELECT 直到获得结果?

    如果我想以递减精度搜索表中的单行 例如像这样 SELECT FROM image WHERE name LIKE text AND group id 10 LIMIT 1 当这没有给我结果时 尝试这个 SELECT FROM image W
  • C++ 字符串排序像人类一样吗?

    我想按照人类对字母数字字符串进行排序的方式对其进行排序 即 A2 位于 A10 之前 a 当然位于 Z 之前 有没有什么方法可以不写迷你解析器 理想情况下 它还会将 A1B1 放在 A1B10 之前 我看到问题了 Microsoft SQL
  • 如何将一个数据帧映射到另一个数据帧(python pandas)?

    给定这两个数据帧 如何获得预期的输出数据帧 长的方法是循环遍历数据帧的行iloc然后使用map转换后的函数df2 to a dict将 x 和 y 映射到它们的分数 这看起来很乏味 并且在大型数据帧上运行需要很长时间 我希望有一个更清洁的解
  • 使用 python 验证 SSL 中的对等点

    我试图找出如何通过 python 中的服务器验证自签名证书 我在谷歌上找不到太多数据 我还想确保服务器网址 预先感谢您的任何见解 从我的第一个回复的评论中 我发现人们普遍误解了 验证证书的含义 我会尝试在这里写一个简短的解释 以消除一些幻想