在python中从pkcs7提取签名数据

时间:2018-09-15 11:31:23

标签: python openssl x509 pem pkcs#7

我有一个USB加密令牌,能够签名数据并将其打包在pkcs文件中。然后我可以使用openssl从该文件中提取证书和数据,如下所示:

openssl cms -verify -in signature.p7s -inform DER -noverify -outform DER -signer cert.pem -out textdata

所以我的问题是如何使用python(pyopenssl)做同样的事情?

我已尝试按照here的说明进行操作,但是情况有所不同-我附加了签名,没有单独的签名和证书文件-我有ASN.1编码文件,其中包含作为证书的数据和签名

1 个答案:

答案 0 :(得分:1)

要实现您想要的目标,有几个障碍需要克服。

首先,:绑定本身在其所需功能所在的pyopenssl模块中受到限制。实际上,the pyopenssl crypto documentation指出: enter image description here 提到的pyca/cryptography模块通过crypto模块的两个内部属性公开,名称分别为pyopenssl crypto_lib,这些属性必须用于获得所需的功能。

然后,_ffi函数将是您对此的逻辑选择,也不包含在CMS_verify()绑定中。但是,出于您的目的,使用pyca/cryptography可能就足够了-您可以在StackExchange问​​题OpenSSL PKCS#7 vs. S/MIME中阅读所有有关此内容的信息。函数crypto.load_pkcs7_data()派上用场。

话虽如此,以下代码段可能会为您做到这一点-尽管从您的描述来看,我尚不清楚签名人的证书是否包含在PKCS7_verify()文件中(在这种情况下,不必像您一样将.p7s作为-signer的参数)。它对我有用,因此请尝试一下:

openssl cms -verify

如果您决定使用此方法,则为a caveat about using this OpenSSL bindings module directlyenter image description here