I have the following script. It connects to a TLS server and extracts X509 certificate public-key:
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)
The problem is that the returned public-key. I need it in hexadecimal format. How to solve this issue?
This is the output I am getting:
<OpenSSL.crypto.PKey object at 0x0000019EBFDF73C8>
I'm not exactly sure what you're asking for. It would be helpful to paste in the output you received (it looks like you forgot to). This may not bee what you're looking for, but it's worth a try (untested, also you must
import binascii
):You should modify the encoding and format to fit your needs.
EDIT: I think I understand what you're trying to do now. You may want to change the encoding to
Encoding.PKCS1
.