【问题标题】:ValueError: check_hostname requires server_hostname when using socket and ssl modulesValueError: check_hostname 在使用 socket 和 ssl 模块时需要 server_hostname
【发布时间】:2021-09-15 22:02:00
【问题描述】:

我正在尝试制作一个套接字服务器,我想使用 SSL。

我有一个与 asyncio (包括 ssl 位)配合得很好的版本,但我想只用 socket 模块重建它。

我的目标是我需要我的网站能够与这个后端服务器来回发送二进制数据。数据量为 3.6KB,感觉你们不需要这些信息,但我想我会包含它。

我对 python 和套接字非常陌生,所以其中大部分是复制意大利面,感谢 ELI5(最多 14 个)!

感谢阅读!

当我转到浏览器并运行 javascript 时会发生以下错误

websocket = new WebSocket("wss://smolroom.com:8001/");

服务器:

def webServerListener():
    print("webServerListener()")
    ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)

    ssl_cert = "/path/to/cert/this/is/filler"
    ssl_key = "/path/to/cert/this/is/filler"

    ssl_context.load_cert_chain(ssl_cert, keyfile=ssl_key)

    with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
        sock.bind(('', 8001))
        sock.listen(5)
        print("socket server listening")
        while True:
            (clientConnection, clientAddress) = sock.accept()

            with ssl_context.wrap_socket(clientConnection, server_side=True) as ssock:
                try:
                    dealWithClient(ssock)
                finally:
                    ssock.shutdown(socket.SHUT_RDWR)
                    ssock.close()

错误:

webServerListener()
Exception in thread web-server-listener-thread:
Traceback (most recent call last):
  File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self.run()
  File "./server-test.py", line 24, in run
    webServerListener()
  File "./server-test.py", line 86, in webServerListener
    with ssl_context.wrap_socket(clientConnection, server_side=True) as ssock:
  File "/usr/lib/python3.8/ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "/usr/lib/python3.8/ssl.py", line 997, in _create
    raise ValueError("check_hostname requires server_hostname")
ValueError: check_hostname requires server_hostname

【问题讨论】:

    标签: python python-3.x sockets websocket valueerror


    【解决方案1】:

    忽略我最初发布的代码的其他明显问题,导致上述问题的主要问题实际上是开头的以下代码行:

    ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
    

    由于我将此代码作为服务器运行,因此我需要使用正确的 ssl 协议:

    ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 2021-06-27
      • 2022-01-25
      • 2015-04-02
      • 2010-10-17
      • 2017-03-13
      • 1970-01-01
      相关资源
      最近更新 更多