Перевести Java на Python - подписание строк с помощью файлов сертификатов PEM - PullRequest
2 голосов
/ 15 апреля 2010

Я пытаюсь перевести следующую 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()));

Это для проверки подписи PKI, используемой AWS FPS.http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAccountManagementGuide/VerifyingSignature.html

Спасибо за помощь!

Ответы [ 3 ]

2 голосов
/ 23 сентября 2010

Я пытался сделать это с помощью pyCrypto и keyczar, но проблема в том, что у них нет возможности анализировать сертификаты X509 (keyczar имеет keyczar.util.ParseX509 (), но он ограничен и не работает для сертификата AWS или I ' я угадываю любой сертификат реального мира).

Я думаю, что 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"
0 голосов
/ 20 октября 2010

После всего, что было сказано и сделано, я решил не использовать собственную библиотеку для проверки подписи (потому что M2Crypto не легко переносится на 64-битную Windows). Я обнаружил, что более поздние версии API Amazon FPS включают вызов REST / SOAP для проверки подписи, поэтому, если поездка на их сервер не слишком дорога, вы можете просто позвонить VerifySignature . Я добавил поддержку для этого в следующей версии boto как boto.fps.connection.verify_signature.

0 голосов
/ 16 апреля 2010

Я написал много кода на Python для X509. Я всегда возвращался к вызову openssl через модуль подпроцесса. Google Keyczar библиотека получает некоторый шум, хотя я никогда не использовал его.

...