Как проверить/проверить цепочку доверия сертификатов X509 в Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как проверить/проверить цепочку доверия сертификатов X509 в Python?

Сообщение Anonymous »

Я работаю над реализацией веб-приложения, использующего API. Во время ответа сервер API отправляет ссылку на сертификат X509 (в формате PEM, состоящий из сертификата подписи и одного или нескольких промежуточных сертификатов на корневой сертификат CA), который я должен загрузить и использовать для дальнейшей проверки.

Перед использованием сертификата мне необходимо убедиться, что все сертификаты в цепочке объединены для создания цепочки доверия к доверенному корневому сертификату ЦС (чтобы обнаружить и избежать любых вредоносных запросы). Мне сложно сделать это на Python, и мои исследования по этому предмету не дали ничего полезного.

Сертификат легко захватывается и загружается с помощью запросов и M2Crypto р>

Код: Выделить всё

import requests
from M2Crypto import RSA, X509

mypem = requests.get('https://server.com/my_certificate.pem')
cert = X509.load_cert_string(str(mypem.text), X509.FORMAT_PEM)
Однако проверка цепочки сертификатов представляет собой проблему. Для меня невозможно записать сертификат на диск, чтобы использовать утилиту командной строки, такую ​​​​как openssl, через что-то вроде подпроцесса, поэтому это должно быть сделано через Python. У меня также нет открытых соединений, поэтому использование решения проверки на основе соединения (как указано в этом ответе/теме: https://stackoverflow.com/a/1088224/4984533) тоже не будет работать.
В другой теме об этой проблеме (по адресу https://stackoverflow.com/a/4427081) аббат объясняет, что m2crypto не способен выполнить эту проверку, и говорит, что он написал расширение, позволяющее проверка (с использованием модуля m2ext), но его патч никогда не работает, всегда возвращает false, хотя я знаю, что он действителен:

Код: Выделить всё

from m2ext import SSL
ctx = SSL.Context()
ctx.load_verify_locations(capath='/etc/ssl/certs/') # I have run c_rehash in this directory to generate a list of cert files with signature based names
if not ctx.validate_certificate(cert): # always happens
print('Invalid certificate!')
Здесь также есть этот ответ в аналогичной теме https://stackoverflow.com/a/9007764/4984533, в котором Джон Мэтьюз утверждает, что написал патч, который подойдет это, но, к сожалению, ссылка на патч больше не работает - и в любом случае в этой теме есть комментарий, в котором говорится, что патч не работает с openssl 0.9.8e.

Все ответы, касающиеся проверки цепочки доверия сертификатов в Python, похоже, либо ссылаются на мертвый патч, либо возвращаются к m2ext.

Есть ли простой и понятный способ Как проверить цепочку доверия моих сертификатов в Python?

Подробнее здесь: https://stackoverflow.com/questions/307 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»