【问题标题】:SSL error on web request when using CNAME使用 CNAME 时 Web 请求出现 SSL 错误
【发布时间】:2020-08-01 07:26:06
【问题描述】:

如何修复由 CNAME DNS 记录引起的 SSL 错误?

我有一个托管在 AWS 上的 API,可通过 https://sd098fs0f98s9f0s.execute-api.us-east-1.amazonaws.com 之类的 URL 访问。

为了缩短它并重新命名它,我设置了一条 CNAME 记录以将 myapi.mydomain.com 映射到 sd098fs0f98s9f0s.execute-api.us-east-1.amazonaws.com。

使用原始 URL,这个简单的 Python 可以完美访问 API:

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

但是,使用新网址:

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)

这是什么原因造成的,我该如何解决?

【问题讨论】:

    标签: python amazon-web-services ssl


    【解决方案1】:

    我看到您使用的是 https。服务器证书颁发给特定的主机名(通用名称属性)。此名称必须与您尝试使用 HTTPS 访问的地址匹配。如果您添加了 DNS CNAME,则必须更新证书。如果我没记错的话,您必须将 CNAME 添加为备用主题名称属性,因此您需要一个新证书。

    错误“WRONG_VERSION_NUMBER”可能有些误导。这意味着服务器提供了错误的 TLS 版本。在 TLS 握手中,客户端和服务器协商 TLS 版本。如果服务器仅支持 1.0 而您的客户端仅接受 1.2+,则会出现“WRONG_VERSION_NUMBER”。但是,如果客户端收到一些意外数据,例如 plain HTTP 而不是 HTTPS,也可能会发生这种情况。要检查究竟是什么意外数据,您必须捕获 wireshark / tcpdump 网络流量日志。我最近浪费了很多时间调试 wrong_version_number。只有在查看了wireshark的日志之后,才发现是中国防火墙,因为我们在最初的Client Hello中设置了HTTP Forbidden。

    【讨论】:

      猜你喜欢
      • 2018-12-01
      • 2021-09-07
      • 1970-01-01
      • 2020-12-07
      • 2020-03-14
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多