У меня есть следующий код в 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](https://i.stack.imgur.com/AgplQ.png)
Однако COMODO RSA Certification Authority
есть во всех файлах комплектов, которые я пробовал (как и ожидалось) и в связке ключей (я использую MacOS High Sierra).Обратите внимание, что серийные номера совпадают.
Второй сертификат в цепочке отсутствует в системе.Я знаю, что рута достаточно, но на всякий случай я попытался загрузить его и добавить его в файл комплекта, после преобразования файла CRT в PEM:
![enter image description here](https://i.stack.imgur.com/0HLgl.png)
Тот же результат.Почему этот конкретный сертификат не работает?На что мне смотреть?