使用pyOpenSSL创建asn1parse、crl和获取pem

使用pyOpenSSL创建asn1parse、crl和获取pem,openssl,cryptography,x509,pem,pyopenssl,Openssl,Cryptography,X509,Pem,Pyopenssl,我目前正在使用openSSL命令解析签名文件,提取.clrs并最终转换为.pem 将签名文件解析为asn1parse_content.txt openssl asn1parse-notify DER-in signed.p7s>>asn1parse_content.txt 使用从asn1parse_content.txt获得的偏移量和长度从signed.p7s提取crl内容 dd if=signed.p7s of=crl1.crl bs=1 count=5000 skip=4000 从crl转换

我目前正在使用
openSSL
命令解析签名文件,提取
.clrs
并最终转换为
.pem

将签名文件解析为asn1parse_content.txt
openssl asn1parse-notify DER-in signed.p7s>>asn1parse_content.txt

使用从asn1parse_content.txt获得的偏移量和长度从signed.p7s提取crl内容
dd if=signed.p7s of=crl1.crl bs=1 count=5000 skip=4000

从crl转换为pem
openssl crl-通知DER-输入crl1.crl-输出PEM-输出crl1\u PEM.PEM

我需要在windows中使用python
pyOpenSSL
模块做同样的事情,已经检查过相关帖子,但是没有一篇符合我的要求,大多数帖子都与RSA密钥、私钥/公钥以及直接从
.p7s
提取
.pem
等相关

我对
python
OpenSSL
非常陌生,并且已经想出了一个小程序来进行测试

下面是从p7s文件获取asn1parse数据的程序

import sys
from OpenSSL import crypto
from OpenSSL._util import (
    ffi as _ffi,
    lib as _lib,
)
p7s_file = sys.argv[1]
with open(p7s_file, 'rb') as f:
    p7data = f.read()
p7 = crypto.load_pkcs7_data(crypto.FILETYPE_ASN1, p7data)
print p7
实际产量

C:\Python27\lib\site packages\OpenSSL\crypto.py:14:cryptographydeproductionwarning:Python核心团队不再支持Python 2。对它的支持现在在密码学中已被弃用,并将在将来的版本中删除。
从加密导入utils,x509

但我期待着一系列的句子,如下面所示

0:d=0 hl=2 l=inf cons:SEQUENCE
2:d=1 hl=2 l=9原始:对象:pkcs7签名数据 13:d=1 hl=2 l=inf cons:cont[0]
15:d=2 hl=2 l=inf cons:SEQUENCE
17:d=3 hl=2 l=1初始值:整数:01 20:d=3 hl=2 l=15 cons:SET
22:d=4 hl=2 l=13 cons:序列
24:d=5 hl=2 l=9初始值:对象:sha256 35:d=5 hl=2 l=0初始值:空值
37:d=3 hl=2 l=inf cons:SEQUENCE
39:d=4 hl=2 l=9原始:对象:pkcs7数据 50:d=4 hl=2 l=0初始值:EOC
还有很多其他的线路

我使用偏移量(即第一个值hl和l)使用
dd
命令提取
crl
内容

如果能提供这方面的参考资料和例子,我将不胜感激

以下是我已经检查过的帖子


还有很多其他的

更新1:

在上面的代码中,我添加了以下几行

pkcs7_PEM = crypto.load_pkcs7_data(crypto.FILETYPE_PEM, p7data)
pkcs7_crl = pkcs7_PEM.get_crls()
print pkcs7_crl
然后我犯了这个错误

C:\Python27\lib\site packages\OpenSSL\crypto.py:14:cryptographydeproductionwarning:Python核心团队不再支持Python 2。对它的支持现在在密码学中已被弃用,并将在将来的版本中删除。 从加密导入utils,x509

回溯(最近一次呼叫最后一次):
文件“asn1_check.py”,第51行,在
pkcs7_PEM=crypto.load_pkcs7_数据(crypto.FILETYPE_PEM,p7data)
文件“C:\Python27\lib\site packages\OpenSSL\crypto.py”,第3131行,在load\u pkcs7\u数据中 _引发当前错误() 文件“C:\Python27\lib\site packages\OpenSSL\u util.py”,第57行,在错误队列的异常中 引发异常类型(错误)
OpenSSL.crypto.Error:[('PEM例程','get_name','no start line')]


虽然询问了一些非常不同的问题,但指向该问题的A链接(在“文件更改”选项卡中)包含了
get\u crls
@dave\u thompson\u 085的代码,我想我确实使用了正确的函数
load\u pkcs7\u data
,但输出结果并不是我所期望的,我已经用更多细节更新了我的问题,你能检查一下吗。当我为
get_crls()
添加代码时,我得到了一组不同的错误。您的文件显然是“ASN1”格式(OpenSSL通常称之为DER),而不是PEM。您以前成功地将其加载为ASN1;继续这样做。@dave_thompson_085谢谢,在
p7=crypto.load\u pkcs7_data(crypto.FILETYPE\u ASN1,p7data)
之后,现在p7是
OpenSSL.crypto.pkcs7
的对象,我们如何从中获取
crl
数据,使用哪些函数?您的文件显然不是PEM,因此,使用
FILETYPE\u ASN1
加载pkcs7\u数据确实有效,而使用
FILETYPE\u PEM
则无效。不要采用无效的方法。采取有效的方法。一旦拥有了
pkcs7
对象,如何处理它并不取决于如何读取它。我链接到的拉请求显然不被接受到项目中,所以你不能只使用<代码> P7.GETYCRLs<代码>,你需要“MunKePosiple”添加它,或者将它作为单独的代码编写(C++将称为“朋友”例程,但Python没有这个术语,我知道)。