这个问题是关于存折是在保密协议下的未来几天,但这是一个通用的PKCS7问题。
我有一个从我的密钥链导出的.p12文件。我可以使用以下命令将其分为两个pems

openssl pkcs12 -in "mycert.p12" -clcerts -nokeys -out certificate.pem
openssl pkcs12 -in "mycert.p12" -nocerts -out key.pem

下一步是使用此密钥和证书创建已签名的PKCS7文件。使用openssl很容易做到这一点:
openssl smime -binary -sign \
    -signer certificate.pem -inkey key.pem \
    -in <datafile> -out signature \
    -outform DER

问题是,假设我有证书和密钥,那么在Google App Engine中,最好的方法是什么?不幸的是,我对密码学还不太熟悉,但我在网上搜索发现了PyCrypto和keychar。有没有一个公认的方法来做这个应用程序引擎,还是我需要写一些东西?有什么建议可以从哪个包开始?
我知道openssl在AppEngine上不可用,但是PyCrypto是如果您使用python 2.7的话,对吗?我也看到过有人让keychar与之合作的帖子。不过,我还没有找到一种简单的方法来生成给定密钥和证书的PKCS7编码数据。
提前感谢您的指导。

最佳答案

这里有一种使用M2Crypto的方法,从https://github.com/devartis/passbook

def passwordCallback(*args, **kwds):
    return password

smime = SMIME.SMIME()
smime.load_key('key.pem', 'certificate.pem', callback=passwordCallback)
pk7 = smime.sign(SMIME.BIO.MemoryBuffer(manifest), flags=SMIME.PKCS7_DETACHED | SMIME.PKCS7_BINARY)
pem = SMIME.BIO.MemoryBuffer()
pk7.write(pem)
# convert pem to der
der = ''.join(l.strip() for l in pem.read().split('-----')[2].splitlines()).decode('base64')

open('signature', 'w').write(der)

10-07 21:52