Установка сертификата для определенного центра сертификации или понимание того, почему существующий сертификат не работает - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть следующий код в Python3.7:

    import urllib.request
    import urllib.error
    import ssl
    import certifi

    # Create the SSL context
    # Was using cafile=certifi.where() before, but copied it inline. Read below
    context = ssl.create_default_context(cafile='cacert.pem')

    # Prepare the request
    request = urllib.request.Request(some_url)

    try:

        connection = urllib.request.urlopen(request, context=context)

    except urllib.error.URLError as e:
        print(e)

Я пробовал несколько разных some_url, и у меня возникла проблема для конкретного, https://hypelabs.io. ДругоеURL работают;Я тестировал, например, https://facebook.com, https://stackoverflow.com и т. Д., Все работает правильно.Для hypelabs.io я получаю это вместо:

<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1051)>

Первые мысли были о том, что ЦС не был распознан системой, и что мне сначала нужно было установить сертификат ЦС.Я проверил цепочку в браузере, и вот что я нашел:

enter image description here

Однако COMODO RSA Certification Authority есть во всех файлах комплектов, которые я пробовал (как и ожидалось) и в связке ключей (я использую MacOS High Sierra).Обратите внимание, что серийные номера совпадают.

Второй сертификат в цепочке отсутствует в системе.Я знаю, что рута достаточно, но на всякий случай я попытался загрузить его и добавить его в файл комплекта, после преобразования файла CRT в PEM:

enter image description here

Тот же результат.Почему этот конкретный сертификат не работает?На что мне смотреть?

1 Ответ

0 голосов
/ 24 декабря 2018

Сайт неправильно настроен и не может предоставить необходимый промежуточный сертификат.Поэтому в отчете SSLLabs говорится:

This server's certificate chain is incomplete. Grade capped to B.

Второй сертификат в цепочке отсутствует в системе.Я знаю, что рута достаточно, но на всякий случай я попытался загрузить его и добавить в файл комплекта после преобразования файла CRT в PEM.

Полагаю, вы здесь что-то не так сделали.Учитывая, что ваше описание верно, я предполагаю, что оно не полностью соответствует тому, что вы на самом деле сделали.

Я взял недостающий сертификат с тем же отпечатком, который можно найти здесь , и добавил егов список корневых CA (взято на Ubuntu с /etc/ssl/certs/ca-certificates.crt. После этого доступ к сайту работал без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...