3

この質問は、今後数日間 NDA の下にある Passbook に関するものですが、これは一般的な 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

問題は、証明書と鍵を持っていると仮定して、Google App Engine でこれを行う最善の方法は何かということです。残念ながら、私は暗号化に少し慣れていませんが、グーグルで検索して、PyCrypto と keyczar を見つけました。App Engine でこれを行うための受け入れられた方法はありますか、それとも何かを書く必要がありますか? どのパッケージから始めるかについての推奨事項はありますか?
私はopensslがAppEngineで利用できないことを知っていますが、PyCryptoはpython 2.7を使用している場合ですよね? そして、keyczar を使って動作させる人々の投稿を見てきました。ただし、キーと証明書を指定して PKCS7 でエンコードされたデータを生成する簡単な方法を見つけることができませんでした。

ご指導いただきありがとうございます。

4

1 に答える 1

1

https://github.com/devartis/passbookから取得した M2Crypto を使用する方法を次に示します。

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)
于 2012-09-20T14:34:32.617 に答える