[英]How to extract RSA public-key from x509 certificate in python
我有以下腳本。 它連接到 TLS 服務器並提取 X509 證書公鑰:
import socket, ssl
import OpenSSL
hostname='www.google.com'
port=443
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = context.wrap_socket(s, server_hostname=hostname)
ssl_sock.connect((hostname, port))
ssl_sock.close()
print("ssl connection Done")
cert = ssl.get_server_certificate((hostname, port))
# OpenSSL
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
pk = x509.get_pubkey()
print(pk)
問題在於返回的公鑰。 我需要它的十六進制格式。 如何解決這個問題?
這是我得到的輸出:
<OpenSSL.crypto.PKey object at 0x0000019EBFDF73C8>
我不確定你要問什么。 粘貼您收到的輸出會很有幫助(看起來您忘記了)。 這可能不是您想要的,但值得一試(未經測試,您還必須import binascii
):
print(binascii.hexlify(pk.to_cryptography_key().public_key().public_bytes(Encoding.DER, PublicFormat.SubjectPublicKeyInfo))
您應該修改編碼和格式以滿足您的需要。
編輯:我想我明白你現在想要做什么。 您可能希望將編碼更改為Encoding.PKCS1
。
#pk = x509.get_pubkey() # from your code.
IntPk = pk.to_cryptography_key().public_numbers()
print(IntPk.n)# modulus
print(IntPk.e)# exponent
在python3中,任意精度算術是默認的。 所以解密是可能的,如下所示:
pow(signature, e, n))# (a**b)%c is by pow(a, b, c)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.