2016-12-21 25 views
0

証明書の公開鍵を抽出するが、16進数形式ではないこのスクリプトがあります。公開鍵を16進形式で抽出するにはどうすればよいですか?16進形式のPEM証明書から公開鍵を抽出する方法

import socket, ssl 
import OpenSSL 
#import binascii 

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) 

print (OpenSSL.crypto.dump_publickey(OpenSSL.crypto.FILETYPE_PEM,x509.get_pubkey())) 

これは私が取得しています出力されます:

RSA.publickey().exportKey("DER") 

これはあなたがちょうど進に変換し、バイナリであるフォーマットをDER与える:

b'-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvLyy8xoWO8b2nSjh746S\nmxOyrntQj/C04DaNCQDkhFFXf2w5ZfChIMk3NmThBmTydm4rl0r7TlqoNfkNc8Xr\n/P+WJtDku8ai2R/usFWPrayZZGtlWd6BpBfI5jVuIaHyStLZw7+IMhtHfQDo1wsw\nmPx0sxmAOqEeoXcX45x5G8LKT1n78r0NX8bjAM0upk5dseg3QCVKNSPgVUueIAM3\nt/5B6GpqL0R2cjp+HadsJAr93l0buBIfGU911k4ntuY3JzYUEbQ7warZT7bBT1FI\nX6J0RpFDaIxiIhS+lHZHziKP5pb+QUGFnakQmglu/L1D+k3Go1WangeL+bEeztEi\nSQIDAQAB\n-----END PUBLIC KEY-----\n' 

答えて

0

はちょうどそれを行います。

+0

「AttributeError: 'X509'オブジェクトには属性 'publickey''がありません – user2192774

+0

代わりにRSAオブジェクトを使用してください – Raskayu

関連する問題