Я новичок в Python и сейчас борется с этим, поэтому я подумал, что кто-то из сообщества сможет помочь.
Я пытаюсь подключиться к стороннему серверу предприятия, который не является глобальным центром сертификации.
У меня есть следующие файлы
Я сделал следующие шаги:
Я взглянул на документацию на запросы python: запросы python, но я все еще не понимаю команды openssl, которые мне нужно сделать, чтобы создать client.crt и client.key с помощью аргумента cert или, альтернативно, аргумент проверки,
Какие команды openssl мне нужно сделать с учетом файлов, которые у меня есть, чтобы создать client.crt и client.key?
Ниже приведен код, который я пытаюсь запустить в python:
import requests
r = requests.get(url, cert=('their.pem', 'my_private.key'))
print(r.text)
Я также пробовал с паролем личного ключа, то есть:
r = requests.get(url, cert=('their.pem', 'my_private.key', 'private_key_password'))
Но в обоих этих вызовах я получаю запрос на ввод "Введите фразу для передачи PEM", на которую я ввожу пароль my_private.key, но оба варианта не работают со следующей ошибкой: request.packages.urllib3.exceptions.SSLError: ("плохое рукопожатие: Ошибка ([("Подпрограммы SSL", "ssl3_get_server_certificate", "проверка сертификата не выполнена")],) ",
Сервер сторонних производителей, который не является глобальным центром сертификации.
requests.packages.urllib3.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
Это звучит так, как будто вам нужно доверять корневому сертификату (поскольку, как вы упомянули, это не глобальный CA, а значит, он не находится в корневом хранилище Windows или Linux).
assert_hostname=False
чтобы отключить проверку хоста. Это небезопасно и позволит любому, кто может перехватить ваше сетевое подключение, показать случайный сертификат и получить ваши данные.VerifiedHTTPSConnection использует один из assert_fingerprint, assert_hostname и хоста в этом порядке для проверки соединений. Если assert_hostname False, проверка не производится.
their.pem
может иметь несколько сертификатов внутри - откройте его в текстовом редакторе и посмотрите (они будут очевидны). Возможно, вы захотите разделить их на отдельные файлы. Чтобы прочитать файл, запуститеopenssl x509 -text -noout -in file.pem
. Обычно сертификат корневого уровня используется для подписи других сертификатов (это необходимо для публичных сертификатов), но здесь это может быть не так.