2016-12-13 6 views
1

У меня есть следующий скрипт. Он подключается к серверу TLS и извлекает некоторые данные X509, такие как даты действительности и открытый ключ. У меня есть следующий сценарий:Как извлечь x509 в python

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) 

Проблема заключается в том, что сроки действия и открытый ключ возвращаются в нечитаемом формате. Как решить эту проблему? Получаете ли вы действительность в формате даты и открытый ключ в шестнадцатеричном формате?

Также, как сохранить файл сертификата на локальном диске для справки?

EDIT: Это выход я получаю:

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

Что не читается? –

+0

Может ли это быть YYYYMMDDHHMM в формате даты? –

+0

Что вы имели в виду: «открытый ключ в шестнадцатеричном формате»? –

ответ

4

Дата возвращается является ГГГГММДДЧЧммы отформатирована датой. Вы можете преобразовать его в объект datetime с:

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

Спасибо. Но чтобы понять суть вопроса, дайте мне знать, как получить открытый ключ и как сохранить файл локально. – user2192774

+0

Ключ сервера ** - это открытый ключ. Просто напишите это в файл –

+0

Неправильно. Я хочу ключ в шестнадцатеричном формате. формат. Как преобразовать этот формат в hex? и я хочу сохранить сертификат x509 в файл. – user2192774

Смежные вопросы