我需要使用在Google App Engine(GAE)上运行的Python应用程序为某些数据创建PKCS7签名。更具体地说,我正在尝试创建Apple Passbook通行证清单的PKCS7签名; Passbook通行证要求PKCS7签名文件存在,以便成为完整有效的通行证。
我花了将近一个星期的时间研究并试图无济于事。
我可以使用openssl命令行在我的本地PC上成功创建签名:
openssl smime -binary -sign -certfile WWDR.pem -signer certificate.pem -inkey key.pem -in manifest.json -out signature -outform DER
我还可以在我的本地PC上使用M2Crypto库成功创建签名:
from M2Crypto import BIO, SMIME, X509
s = SMIME.SMIME()
s.load_key('identity.pem') # my certificate and private key
x509 = X509.load_cert('WWDR.pem') # Apple's intermediate certificate
sk = X509.X509_Stack()
sk.push(x509)
s.set_x509_stack(sk)
p7 = s.sign(bio_manifest, SMIME.PKCS7_DETACHED | SMIME.PKCS7_BINARY)
pkcs7_buffer = BIO.MemoryBuffer()
p7.write_der(pkcs7_buffer)
f = open('signature', 'w')
f.write(pkcs7_buffer.read())
f.close()
但是,M2Crypto是OpenSSL的包装器,GAE不支持。
GAE支持pycrypto库,但似乎该库不支持PKCS7签名。
我也看过tlslite,这是一个纯python实现,因此应该在GAE上支持,但它似乎也不支持PKCS7签名。
我正在寻找能够在GAE上成功创建PKCS7签名的任何人的指导。如果你能指出我的纯python库或任何其他解决方案,我真的很感激。
否则,我觉得我已经达到GAE的可能范围,并且希望将我的应用程序移动到另一个平台。我有点大惊小怪,鉴于数据安全的重要性,GAE不支持openssl库;看起来他们并不认真提供一个Web应用程序服务,该服务为基础知识之外的任何事情提供支持。除非(希望)我错过了显而易见的事情。
感谢您的帮助!