評論:我不知道是否有一種方法將其轉換爲另一種格式,以便它能夠被
可以使用openssl
轉換PKCS#7
到PEM
,PEM
是可讀的使用PyOpenSSL
openssl pkcs7 -print_certs -in sample.p7b -out sample.cer
問題:......我怎麼能得到公鑰的SHA1摘要的簽名
這不是因爲2015年
從拉入請求期運用的代碼實現,拉入請求stalles你能行的。
從:GitHub上的pycA/pyopenssl: implement getters for pkcs#7 certificates, crl's, and data #367
def get_certificates(self):
from OpenSSL.crypto import _lib, _ffi, X509
"""
https://github.com/pyca/pyopenssl/pull/367/files#r67300900
Returns all certificates for the PKCS7 structure, if present. Only
objects of type ``signedData`` or ``signedAndEnvelopedData`` can embed
certificates.
:return: The certificates in the PKCS7, or :const:`None` if
there are none.
:rtype: :class:`tuple` of :class:`X509` or :const:`None`
"""
certs = _ffi.NULL
if self.type_is_signed():
certs = self._pkcs7.d.sign.cert
elif self.type_is_signedAndEnveloped():
certs = self._pkcs7.d.signed_and_enveloped.cert
pycerts = []
for i in range(_lib.sk_X509_num(certs)):
pycert = X509.__new__(X509)
pycert._x509 = _lib.sk_X509_value(certs, i)
pycerts.append(pycert)
if not pycerts:
return None
return tuple(pycerts)
用法:
pkcs7 = crypto.load_pkcs7_data(crypto.FILETYPE_ASN1, open('signature.der', 'rb').read())
certs = get_certificates(pkcs7)
print(certs)
for cert in certs:
print('digest:{}'.format(cert.digest('sha256')))
輸出:
(<OpenSSL.crypto.X509 object at 0xf671b62c>, <OpenSSL.crypto.X509 object at 0xf671b86c>)
digest:b'48:19:A4:2A:56:94:22:14:73:EC:2B:01:45:9E:0B:87:92:44:26:5E:57:AF:59:F5:4C:89:F3:79:83:14:11:A3'
digest:b'25:BC:AC:86:8F:51:8B:EE:47:CC:8B:A7:78:91:7E:86:09:56:19:4B:B9:C4:10:1B:DF:13:CA:A6:54:E1:F7:4C'
與Python測試:3.4.2 - OpenSSL的:17.1.0 - 加密:1.9 - CFFI:1.10.0
使用
OpenSSL.crypto.load_pkcs7_data(type, buffer)
從字符串buf加載pkcs7數據與類型類型一起編碼。
類型類型必須是FILETYPE_PEM或FILETYPE_ASN1)。
你在找什麼屬性? –
我需要簽名中公鑰的sha1摘要 – kkzxak47
@stovfl 與PKCS12相比,PKCS7具有很少的屬性和方法。 我不知道是否有辦法將其轉換爲另一種格式,以便它可以被解析。 [pyopenssle DOC](https://pyopenssl.readthedocs.io/en/latest/api/crypto.html#pkcs7-objects) PKCS7對象 PKCS7對象有以下幾種方法: PKCS7.type_is_signed() FIXME PKCS7.type_is_enveloped() FIXME PKCS7.type_is_signedAndEnveloped() FIXME PKCS7.type_is_data() FIXME PKCS7.get_type_name() 獲取PKCS7的類型名稱。 – kkzxak47