我需要验证我的自定义CA签署了证书.使用OpenSSL命令行实用程序很容易做到:

# Custom CA file: ca-cert.pem

# Cert signed by above CA: bob.cert

$openssl verify -CAfile test-ca-cert.pem bob.cert

bob.cert: OK

但是我需要在Python中做同样的事情,而且我真的不想调用命令行实用程序.据我所知,M2Crypto是OpenSSL的“最完整”的python包装,但是我无法弄清楚如何完成命令行实用程序的功能!

参考this question如何在C代码中完成同样的任务,我已经能够得到一半的.我选择的变量名称与openssl verify命令行实用程序的源代码中使用的变量名相同,请参阅openssl-xxx / apps / verify.c.

import M2Crypto as m2

# Load the certificates

cacert = m2.X509.load_cert('test-ca-cert.pem') # Create cert object from CA cert file

bobcert = m2.X509.load_cert('bob.cert') # Create cert object from Bob's cert file

cert_ctx = m2.X509.X509_Store() # Step 1 from referenced C code steps

csc = m2.X509.X509_Store_Context(cert_ctx) # Step 2 & 5

cert_ctx.add_cert(cacert) # Step 3

cert_ctx.add_cert(bobcert) # ditto

# Skip step 4 (no CRLs to add)

# Step 5 is combined with step 2...I think. (X509_STORE_CTX_init: Python creates and

# initialises an object in the same step)

# Skip step 6? (can't find anything corresponding to

# X509_STORE_CTX_set_purpose, not sure if we need to anyway???)

#

# It all falls apart at this point, as steps 7 and 8 don't have any corresponding

# functions in M2Crypto -- I even grepped the entire source code of M2Crypto, and

# neither of the following functions are present in it:

# Step 7: X509_STORE_CTX_set_cert - Tell the context which certificate to validate.

# Step 8: X509_verify_cert - Finally, validate it

所以我在那里的一半,但我似乎实际上不能完成验证!我错过了什么吗?有没有其他的功能我应该使用从M2Crypto?我应该寻找一个完全不同的OpenSSL的python包装?如何在python中完成这个任务?

请注意,我正在使用证书加密/解密FILES,所以我不喜欢使用基于SSL连接的对等证书验证(其中有already been answered),因为我没有任何SSL连接.

python 指定证书验证_如何在python中验证SSL证书?相关推荐

  1. python指定返回类型_如何在python中指定方法返回类型列表 - python

    假设我有一个类似下面的方法 def validate(self, item:dict, attrs:dict)-> list: 如果我想更具体一点,告诉我我的返回类型是 验证消息? 我应该如何实 ...

  2. python字符串筛选输出_如何在Python中过滤字符串列表

    Python使用列表数据类型在顺序索引中存储多个数据.它的工作方式类似于其他编程语言的数字数组.filter()方法是Python的一种非常有用的方法.可以使用filter()方法从Python中的任 ...

  3. python绘图背景透明_如何在 Matplotlib 中更改绘图背景

    介绍Matplotlib是Python中使用最广泛的数据可视化库之一.无论是简单还是复杂的可视化项目,它都是大多数人的首选库.在本教程中,我们将研究如何在Matplotlib中更改绘图的背景.导入数据 ...

  4. python的loc函数_如何在pandas中使用loc、iloc函数进行数据索引(入门篇)

    在数据分析过程中,很多时候我们需要从数据表中提取出我们需要的部分,而这么做的前提是我们需要先索引出这一部分数据.今天我们就来探索一下,如何在pandas中使用loc函数和iloc函数索引数据. 今天我 ...

  5. python右对齐 数字_如何在Python中右对齐数值数据?

    我有一些数据,我显示在3列格式,形式"键:值键:键:值键:值".这里有一个例子: p: 1 sl: 10 afy: 4 q: 12 lg: 10 kla: 3 r: 0 kl: 1 ...

  6. python队列怎么用_如何在Python中使用多处理队列? - python

    我很难理解多处理队列如何在python上工作以及如何实现它.假设我有两个python模块,它们从共享文件中访问数据,我们将这两个模块称为writer和Reader.我的计划是让读取器和写入器都将请求放 ...

  7. python隐藏启动台_如何在Python中启动后台进程?

    如何在Python中启动后台进程? 我正在尝试将shell脚本移植到更易读的python版本. 原始shell脚本在后台使用"&"启动多个进程(实用程序,监视器等). 如何 ...

  8. python获取当前时间戳_如何在Python中获取当前时间戳?

    在Python中可以使用来自模块time.datetime或calendar的函数来获取当前时间戳,代码语句如[import time;ts = time.time() print(ts)]. 在Py ...

  9. python 运行r语言_如何在R中运行Python

    python 运行r语言 尽管我很喜欢R,但很显然Python还是一种很棒的语言-既适用于数据科学又适用于通用计算. R用户想要在Python中做一些事情可能有充分的理由. 也许这是一个很棒的库,还没 ...

最新文章

  1. linux中的apachectl是什么命令
  2. elasticsearch 分页查询实现方案——Top K+归并排序
  3. 【转载】SAP 计划策略组40、50对比分析
  4. Web 趋势榜: 上周不可错过的最热门的 10 大 Web 项目 - 又增加了那么多的好项目啊 - 210611...
  5. easyui datagrid 单选框 效果
  6. pytorch---模型保存预加载(1)什么是状态字典:state_dict
  7. Java自学知识点_良心_精心整理
  8. 学生信息管理系统总体设计规划书
  9. Atom 常用快捷键
  10. Windows安全中心功能介绍
  11. python实用案例教程第四章-python 入门到实践第四章案例
  12. 【https】 1 HTTP Security (bb102-1)
  13. NVIDIA GPU Compute Capability解释
  14. destoon调用内容从第几篇开始
  15. 卷积神经网络基础知识五(mobilenet)
  16. Win10神州网信政府版(企业版G)安装
  17. Docker之Docker概述
  18. 对产品经理来说,在求职的时候,PMP和NPDP两个证书,哪一个权威性比较高,含金量比较大?
  19. 5、谷歌地图官方API-可视化数据:地震图
  20. MySQL - change 和 modify 的区别

热门文章

  1. leetcode 遇到的问题
  2. Jenkins升级(rpm方式安装)教程
  3. golang flag包使用示例:接收命令行参数
  4. java代码执行流程
  5. kafka与zookeeper版本对应关系表
  6. Python Django Session中存取值常用API
  7. redis sorted_set数据类型常用命令及跳表skip_list原理
  8. Spring MVC--自定义HttpMessageConverter接收JSON格式的数据
  9. Idea批量修改变量名
  10. 【示例】Lucene查询索引库编程步骤