从证书中提取公钥并加密数据
这是一个作业的要求!我通过 get_peer_certificate()
获取了服务器的证书,然后用 dump_certificate
把证书放进一个变量里。这个证书的格式是 PEM,看起来没问题。
-----BEGIN CERTIFICATE-----
GIBBERISH................
......................
........................
-----END CERTIFICATE-----
我该如何从这个文件('server.pubkey')中提取服务器的公钥,并使用 RSA
算法和任何 Python 库来加密 plaintext
呢?在写这段话的时候,我正在使用 pyOpenSSL。
4 个回答
2
from cryptography.x509 import load_pem_x509_certificate
cert_str = b"-----BEGIN CERTIFICATE-----MIIDETCCAfm..."
cert_obj = load_pem_x509_certificate(cert_str)
public_key = cert_obj.public_key()
private_key = cert_obj.private_key()
6
这段内容是关于编程的讨论,主要涉及一些技术问题和解决方案。虽然具体的问题没有被提到,但可以想象这是一个程序员在寻找帮助的场景。大家在这里分享自己的经验和见解,试图找到最佳的解决办法。
在编程的世界里,遇到问题是很常见的,很多时候我们需要向其他人请教,或者在网上寻找答案。StackOverflow就是这样一个地方,程序员们可以在这里提问、回答问题,互相帮助。
总之,这段内容展示了编程社区的合作精神,大家都在努力解决问题,分享知识。
from OpenSSL import crypto
crtObj = crypto.load_certificate(crypto.FILETYPE_ASN1, config.x509_certificate)
pubKeyObject = crtObj.get_pubkey()
pubKeyString = crypto.dump_publickey(crypto.FILETYPE_PEM, pubKeyObject)
8
我建议你使用一个更全面的加密库,比如 M2Crypto,这个库不仅有X509证书的功能,还有RSA加密的功能:
from M2Crypto import RSA, X509
data = ssl_sock.getpeercert(1)
# load the certificate into M2Crypto to manipulate it
cert = X509.load_cert_string(data, X509.FORMAT_DER)
pub_key = cert.get_pubkey()
rsa_key = pub_key.get_rsa()
cipher = rsa_key.public_encrypt('plaintext', RSA.pkcs1_padding)