SSL - создать client.crt и client.key для Python запросов вызова

1

Я новичок в Python и сейчас борется с этим, поэтому я подумал, что кто-то из сообщества сможет помочь.

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

У меня есть следующие файлы

  • my_csr.key (который я создал сам), и это только CSR, которую я отправил третьей стороне
  • my_private.key (был создан при создании my_csr.key выше)
  • their.pem (который отправил мне третий участник)
  • my.p12

Я сделал следующие шаги:

  1. Мне было поручено третьей стороной создать CSR в качестве шага 1. Используя openssl, я создал my_csr.key (вместе с my_private.key), на который я отправил my_csr.key третьей стороне
  2. Третья сторона взяла мою CSR и отправила мне файл 'their.pem'
  3. Используя 'their.pem' и my_private.key, используя openssl, я создал.p12, который я могу использовать успешно, чтобы сделать SSL-проверенные HTTP-запросы как на С#, так и на Java. Команда openssl для создания p12 была
    • openssl pkcs12 -in their.pem -in key my_private.key -export -out my.p12

Я взглянул на документацию на запросы 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", "проверка сертификата не выполнена")],) ",

Теги:
ssl
openssl

1 ответ

0

Сервер сторонних производителей, который не является глобальным центром сертификации.

requests.packages.urllib3.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)

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

  • Импортируйте корневой файл PEM в корневой магазин для вашей ОС.
  • Используйте глупую имя assert_hostname=False чтобы отключить проверку хоста. Это небезопасно и позволит любому, кто может перехватить ваше сетевое подключение, показать случайный сертификат и получить ваши данные.

VerifiedHTTPSConnection использует один из assert_fingerprint, assert_hostname и хоста в этом порядке для проверки соединений. Если assert_hostname False, проверка не производится.

См. Документы urllib3

  • 0
    Спасибо за ваш ответ. Когда вы говорите «импортировать корневой PEM», вы ссылаетесь на файл их .pem, который мне прислала третья сторона? Большое спасибо за разъяснения, просто хочу убедиться, что я доверяю правильному файлу. Спасибо!
  • 0
    their.pem может иметь несколько сертификатов внутри - откройте его в текстовом редакторе и посмотрите (они будут очевидны). Возможно, вы захотите разделить их на отдельные файлы. Чтобы прочитать файл, запустите openssl x509 -text -noout -in file.pem . Обычно сертификат корневого уровня используется для подписи других сертификатов (это необходимо для публичных сертификатов), но здесь это может быть не так.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню