Ошибка SSL при веб-запросе при использовании CNAME - PullRequest
1 голос
/ 18 апреля 2020

Как исправить ошибку SSL, вызванную DNS-записью CNAME?

У меня есть API, размещенный на AWS, доступный по URL-адресу, например https://sd098fs0f98s9f0s.execute-api.us-east-1.amazonaws.com.

Чтобы сократить это и немного переименовать, я настроил запись CNAME, чтобы сопоставить myapi.mydomain.com с sd098fs0f98s9f0s.execute-api.us-east-1.amazon aws .com.

Используя исходный URL-адрес, этот простой Python может получить полный доступ к API:

import requests     
r = requests.get(url='https://sd098fs0f98s9f0s.execute-api.us-east-1.amazonaws.com')

Однако использование нового URL-адреса:

import requests     
r = requests.get(url='https://myapi.mydomain.com')

приводит к ошибке:

Traceback (most recent call last):
  File ".env/lib/python3.7/site-packages/urllib3/connectionpool.py", line 603, in urlopen
    chunked=chunked)
  File ".env/lib/python3.7/site-packages/urllib3/connectionpool.py", line 344, in _make_request
    self._validate_conn(conn)
  File ".env/lib/python3.7/site-packages/urllib3/connectionpool.py", line 843, in _validate_conn
    conn.connect()
  File ".env/lib/python3.7/site-packages/urllib3/connection.py", line 370, in connect
    ssl_context=context)
  File ".env/lib/python3.7/site-packages/urllib3/util/ssl_.py", line 355, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/usr/lib/python3.7/ssl.py", line 423, in wrap_socket
    session=session
  File "/usr/lib/python3.7/ssl.py", line 870, in _create
    self.do_handshake()
  File "/usr/lib/python3.7/ssl.py", line 1139, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1076)

Что вызывает это и как я могу это исправить?

1 Ответ

2 голосов
/ 18 апреля 2020

Я вижу, что вы используете https. Сертификат сервера выдается с указанием c имя хоста (атрибут общего имени). Это имя должно соответствовать адресу, к которому вы пытаетесь обратиться по HTTPS. Если вы добавили DNS CNAME, вы должны обновить сертификат. Если я правильно помню, вам нужно добавить CNAME в качестве атрибута альтернативного имени субъекта, поэтому вам потребуется новый сертификат.

Ошибка "WRONG_VERSION_NUMBER" может несколько вводить в заблуждение. Это означает, что сервер представил неверную версию TLS. В рукопожатии TLS клиент и сервер согласовывают версию TLS. Если сервер поддерживает только 1.0, а ваш клиент принимает только 1.2+, появится сообщение «WRONG_VERSION_NUMBER». Но это также может произойти, если клиент получит некоторые неожиданные данные, такие как обычный HTTP вместо HTTPS. Чтобы проверить, какие именно были неожиданные данные, вам нужно будет записывать логи сетевого трафика wireshark / tcpdump c. В последнее время я потратил много времени на отладку неправильного номера_правки. Только после просмотра логов wireshark выяснилось, что это брандмауэр Китая, потому что мы получили HTTP Forbidden для первоначального клиента Hello.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...