在谷歌应用程序引擎(python,passbook)中编码PKCS7



这个问题与Passbook有关,Passbook在接下来的几天内处于NDA之下,但这是一个通用的PKCS7问题。

我有一个.p12文件,它是从我的钥匙链中导出的。我可以使用以下命令将其分离为2个pem

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

问题是,假设我有证书和密钥,在谷歌应用程序引擎中最好的方法是什么?不幸的是,我对密码学有点陌生,但我一直在谷歌上搜索,找到了PyCrypto和keyczar。在应用程序引擎上有公认的方法吗?或者我需要写一些东西吗?关于从哪个方案开始有什么建议吗
我知道openssl在AppEngine上不可用,但如果您使用python 2.7,PyCrypto是可用的,对吗?我看到过一些人让keyczar使用它的帖子。不过,在给定密钥和证书的情况下,我一直找不到一种简单的方法来生成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)

最新更新