В настоящее время я сталкиваюсь со странной проблемой при попытке получить доступ к серверу через Python Запросы:
Этот сервер использует сертификат, сгенерированный ЦС, а клиент использует сертификат, подписанный этим же ЦС. CA подписан самоподписанным root CA. При доступе к серверу с использованием такого имени хоста, как этот
requests.get("https://example.com/", verify="root.pem", timeout=3)
, он работает без каких-либо проблем. Когда тот же код выполняется на сервере, который доступен только через IP-адрес publi c, а также имеет сертификат с общим именем и альтернативным именем субъекта, установленным на этот IP-адрес, этот код завершается ошибкой с сообщением об ошибке
requests.get("https://<IP>/", verify="root.pem", timeout=3)
requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP>', port=443): Max retries exceeded with url: /test/ (Caused by SSLError(SSLCertVerificationError("hostname '<IP>' doesn't match '<IP>'")))
, хотя, например, OpenSSL s_client не сообщает об ошибках при подключении.
В сети Я не смог найти никого другого, кто бы сообщал или решал эту проблему, если не были задействованы имена хостов, а были только простые IP-адреса. Сами сертификаты также не являются предметом обсуждения, так как их проверка друг на друга не приводит к ошибкам. Особенно меня смущает сообщение об ошибке, так как IP-адреса явно совпадают.