Отказ от ответственности : это то, как я заставил это работать. Это не должно быть концом, все должно быть всем решением, и я не думаю, что это должно быть. ИМХО setuptools
должен быть настраиваемым или работать иначе, чем он. Если у вас есть другое решение, , пожалуйста, опубликуйте его!
Это заняло чтение кода setuptools в файле ssl_support.py. В моем случае мне нужно было доверять обоим сертификатам. Важные биты ниже:
#setuptools/ssl_support.py
...
cert_paths = """
/etc/pki/tls/certs/ca-bundle.crt
/etc/ssl/certs/ca-certificates.crt
/usr/share/ssl/certs/ca-bundle.crt
/usr/local/share/certs/ca-root.crt
/etc/ssl/cert.pem
/System/Library/OpenSSL/certs/cert.pem
/usr/local/share/certs/ca-root-nss.crt
/etc/ssl/ca-bundle.pem
""".strip().split()
...
def find_ca_bundle():
"""Return an existing CA bundle path, or None"""
extant_cert_paths = filter(os.path.isfile, cert_paths)
return (
get_win_certfile()
or next(extant_cert_paths, None)
or _certifi_where()
)
Этот жестко запрограммированный список путей к файлам фильтруется в порядке и используется в качестве аргумента для вызова urllib.request.build_opener
для выполнения запроса. Вам нужно найти существующий first путь к файлу и добавить свои сертификаты в этот файл. В моем случае это было /etc/ssl/certs/ca-certificates.crt
.