Я хочу написать скрипт python3, который проверяет даты истечения срока действия нескольких сертификатов SSL удаленно. В большинстве случаев я могу получить закодированный сертификат pem с ssl.get_server_certificate((host, port))
Но в одном случае это приводит к следующей ошибке:
ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:847)
если я пытаюсь получить информацию о сертификате с помощью
openssl s_client -connect host:port 2>/dev/null
для командной строки bash работает без проблем.
Рассматриваемый сервер требует, чтобы пользователь проходил аутентификацию с помощью пользовательского сертификата, и я подозреваю, что отсутствие указанного сертификата является причиной сбоя рукопожатия. Но так как меня интересует только проверка метаданных сертификата сервера, мне не нужно предоставлять действительный сертификат пользователя.
Есть ли способ, которым я могу имитировать функциональность openssl s_client
с модулем Python?
Я мог бы вызвать openssl напрямую с помощью subprocess.call()
, но, поскольку для python есть модули openssl, похоже, что должен быть лучший способ.