从证书中提取公钥并加密数据

4 投票
4 回答
14729 浏览
提问于 2025-04-16 16:26

这是一个作业的要求!我通过 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()

来源: https://pyjwt.readthedocs.io/en/stable/faq.html

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)

撰写回答