我有一个USB加密令牌,能够签名数据并将其打包在pkcs文件中。然后我可以使用openssl从该文件中提取证书和数据,如下所示:
openssl cms -verify -in signature.p7s -inform DER -noverify -outform DER -signer cert.pem -out textdata
所以我的问题是如何使用python(pyopenssl)做同样的事情?
我已尝试按照here的说明进行操作,但是情况有所不同-我附加了签名,没有单独的签名和证书文件-我有ASN.1编码文件,其中包含作为证书的数据和签名
答案 0 :(得分:1)
要实现您想要的目标,有几个障碍需要克服。
首先,:
绑定本身在其所需功能所在的pyopenssl
模块中受到限制。实际上,the pyopenssl crypto
documentation指出:
提到的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 directly: