2016-12-13 13 views
1

次のスクリプトがあります。これは、TLSサーバーに接続し、有効期限や公開鍵などのX509データを抽出します。Pythonで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(x509.get_notAfter()) 
print(x509.get_notBefore()) 
print(pk) 

妥当性の日付と公開キーが判読できない形式で返されるという問題があります。この問題を解決するには?つまり、有効期限を日付形式で、公開鍵を16進形式で取得しますか?

また、ローカルディスクに証明書ファイルを保存する方法はありますか。

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

b'20170223141600Z' 
b'20161201141600Z' 
<OpenSSL.crypto.PKey object at 0x0000019EBFDF73C8> 
+0

何が読めないのですか? –

+0

これはYYYYMMDDHHMMの形式の日付ですか? –

+0

「16進形式の公開鍵」とはどういう意味ですか? –

答えて

4

返される日付がYYYYMMDDHHMMフォーマットされた日付です。

datetime.strptime(x509.get_notAfter().decode('ascii'), '%Y%m%d%H%M%SZ') 
+0

ありがとうございます。しかし、ポイントを得るために、公開鍵を入手する方法とファイルをローカルに保存する方法を教えてください。 – user2192774

+0

サーバーキー**は**公開キーです。ファイルに書き込んでください –

+0

これは正しくありません。私は16進数でキーを欲しい。フォーマット。その形式を16進数に変換するには? x509証明書をファイルに保存する必要があります。 – user2192774

関連する問題