usp
usp

Reputation: 111

How to get public key using PyOpenSSL?

I'm tring to create python script, that would take PKCS#12 package and print some information contained in x509 certificate and using for this purpouses PyOpenSSL module. So far i want to fetch from certificate public key. But PKey object doesn't have appropriate method. Where can I move out of here ? Any ideas how to get public key ?

pfx=open('./1.p12','rb').read()
PKCS=crypto.load_pkcs12(pfx)
cert=PKCS.get_certificate()
PKey=cert.get_pubkey()

print PKey
<OpenSSL.crypto.PKey object at 0x012432D8>

Thanks.

Upvotes: 7

Views: 16260

Answers (4)

user3785966
user3785966

Reputation: 2970

I am assuming you want to read the public key from the file.

First install pyopenssl

pip install pyopenssl

from OpenSSL import crypto
import os

file_path = os.path.join(os.getcwd(), '/certificates/test.crt')
with open(file_path, "r") as f:
    cert = f.read()
pub_key_obj = crypto.load_certificate(crypto.FILETYPE_PEM, cert).get_pubkey()
pub_key = crypto.dump_publickey(crypto.FILETYPE_PEM, pub_key_obj)
print(pub_key)

or

file_path = '~/.ssh/private_key'
with open(file_path, "rb") as f:
    raw = f.read()
private_key_obj = crypto.load_privatekey(crypto.FILETYPE_PEM, raw)
pub_key = crypto.dump_publickey(crypto.FILETYPE_PEM, private_key_obj)
print(pub_key)

You will get output as:

-----BEGIN PUBLIC KEY-----

....

-----END PUBLIC KEY-----

Upvotes: 2

CamiloP
CamiloP

Reputation: 132

First you can load the certificate like this

from OpenSSL import crypto

#cert is the encrypted certificate int this format -----BEGIN -----END    
crtObj = crypto.load_certificate(crypto.FILETYPE_PEM, cert)
pubKeyObject = crtObj.get_pubkey()
pubKeyString = crypto.dump_publickey(crypto.FILETYPE_PEM,pubKeyObject)
print pubKeyString

you will see something like

-----BEGIN PUBLIC KEY----- 
....
....
-----END PUBLIC KEY-----

Upvotes: 7

Abhisheietk
Abhisheietk

Reputation: 180

Instead use:

c.dump_privatekey(c.FILETYPE_TEXT,pubkey)

Upvotes: -3

abc
abc

Reputation: 133

Would this work?

print PKey
<OpenSSL.crypto.PKey object at 0x012432D8>

from OpenSSL import crypto

crypto.dump_privatekey(PKey)

Upvotes: -3

Related Questions