2

次の Java を Python に相当するものに翻訳しようとしています。

 // certificate is contents of https://fps.sandbox.amazonaws.com/certs/090909/PKICert.pem
 // signature is a string that I need to verify.
 CertificateFactory factory = CertificateFactory.getInstance("X.509");
 X509Certificate x509Certificate = 
            (X509Certificate) factory.generateCertificate(new ByteArrayInputStream(certificate.getBytes()));
 Signature signatureInstance = Signature.getInstance(signatureAlgorithm);
 signatureInstance.initVerify(x509Certificate.getPublicKey());
 signatureInstance.update(stringToSign.getBytes(UTF_8_Encoding));
 return signatureInstance.verify(Base64.decodeBase64(signature.getBytes()));

これは、AWS FPS で使用される PKI 署名検証用です。http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAccountManagementGuide/VerifyingSignature.html

ご協力いただきありがとうございます!

4

3 に答える 3

2

私は pyCrypto と keyczar でこれを行うことを検討しましたが、問題は X509 証明書を解析する能力がないことです (keyczar には keyczar.util.ParseX509() がありますが、制限があり、AWS 証明書では機能しません。実世界の証明書)。

ただし、M2Crypto は機能すると思います。次のコード スニペットを参照してください。実際にテストするには、実際の署名とプレーンテキストを入力する必要があります。

from M2Crypto import X509

cert = X509.load_cert("PKICert.pem")
pub_key = cert.get_pubkey()

plaintext = "YYY"  # Put plaintext message here
signature = "XXX"  # Put signature of plaintext here

pub_key.verify_init()
pub_key.verify_update(plaintext)
if not pub_key.verify_final(signature):
    print "Signature failed"
于 2010-09-23T02:23:32.540 に答える
0

私は X509 を扱う Python コードをたくさん書いてきました。サブプロセスモジュールを介してopensslを呼び出すことに常に戻ってきました。Google の keyczar ライブラリは話題になっていますが、私は使ったことはありません。

于 2010-04-16T17:02:46.427 に答える
0

結局、ネイティブ ライブラリを使用して署名を検証しないことにしました (M2Crypto は 64 ビット Windows に簡単に移植できないため)。Amazon FPS API の新しいバージョンには、署名を検証するための REST/SOAP 呼び出しが含まれていることがわかりました。そのため、サーバーへのラウンドトリップがそれほど高価でない場合は、VerifySignatureを呼び出すだけで済みます。boto の次のバージョンでは、boto.fps.connection.verify_signature としてこのサポートを追加しました。

于 2010-10-20T12:13:12.143 に答える