使用PEM证书文件将Java转换为Python签名字符串

2024-10-03 04:37:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将下面的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

谢谢你的帮助!在


Tags: comisfactorycontentscertificatejavasignatureverify
3条回答

说到底,我决定不使用本机库来验证签名(因为M2Crypto不容易移植到64位Windows)。我发现AmazonFPSAPI的更高版本包含一个REST/SOAP调用来验证签名,所以如果往返服务器的费用不太高,您可以直接调用VerifySignature。我在boto的下一个版本中添加了对这个的支持boto.fps.连接。验证_签名。在

我研究过使用pyCrypto和keychar来实现这一点,但问题是它们都没有解析X509证书的能力(keychar有keyczar.util.ParseX509但我猜这对现实世界来说是有限的。在

但我相信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"

我写了很多关于X509的Python代码。我总是回到通过subprocess模块调用openssl。Google的keychar库得到了一些关注,尽管我从未使用过它。在

相关问题 更多 >