2015-03-09 2 views
2

Я настроил свой сервер, чтобы обслуживать только https, создавая самозаверяющий сертификат. У меня есть клиент, которому я должен проверить сертификат сервера и после этого загрузить файл с сервера.Как проверить сертификат ssl сервера в python?

Как выполнить проверку на клиенте? Есть ли какой-нибудь пример кода?

Мой вопрос схож с этим: How can the SSL client validate the server's certificate? , но хотя прекрасное объяснение, я не нашел никакой помощи.

До сих пор в моем коде я создаю каталог, а затем загрузить файл с urllib2:

[...] #imports 

def dir_creation(path): 
try: 
    os.makedirs(path) 
except OSError as exception: 
    if exception.errno != errno.EEXIST: 
     raise 


def file_download(url): 
ver_file = urllib2.urlopen(url) 
data = ver_file.read() 
with open(local_filename, "wb") as code: 
    code.write(data) 

dir_creation(path) 
file_download(url) 

ответ

3

Вместо настройки сервера представить самостоятельно подписанный сертификат, вы должны использовать самоподписным сертификат как центр сертификации, чтобы подписать сертификат сервера. (Как сделать это выходит за рамки вашего вопроса, но я уверен, что вы можете найти помощь в переполнении стека или в другом месте.)

Теперь вы должны настроить своего клиента, чтобы доверять своему центру сертификации. В Python (2.7.9 или более поздней версии), вы можете сделать это с помощью модуля ssl:

import ssl 

... # create socket 

ctx = ssl.create_default_context(cafile=path_to_ca_certificate) 
sslsock = ctx.wrap_socket(sock) 

Вы можете передавать и считывать данные на защищенном розеткой. Дополнительную информацию см. В разделе ssl module documentation.

urllib2 API проще:

import urllib2 

resp = urllib2.urlopen(url, cafile=path_to_ca_certificate) 
resp_body = resp.read() 

Если вы хотите использовать запросы, в соответствии с документацией вы можете supply a path to the CA certificate в качестве аргумента verify параметра:

resp = requests.get(url, verify=path_to_ca_certificate) 
+0

Я обновил вопрос с моим кодом я уже использую подход urllib2. Значит, вы говорите, что он может проверить сертификат? Я не могу получить этот параметр: cafile = path_to_ca_certificate. Это сертификат клиента? Не могли бы вы рассказать? –

+0

Он приземлился в Python 2.7.9, который поддерживал усовершенствования модуля 'ssl'. Если вы используете Python 2, вы должны перейти на 2.7.9. – frasertweedale

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