首页 > 解决方案 > 在 Python 中使用套接字通过 SSL 连接到 Postgres 数据库

问题描述

我正在尝试使用套接字连接到 Postgres 数据库,以从客户端强制执行特定的 TLS 版本,以验证数据库不接受来自使用旧版本 TLS(如 tlsv1.1)的客户端的连接。握手时连接失败,出现以下错误:

python test2.py

回溯(最近一次调用):文件“test2.py”,第 12 行,在 ssl_version=ssl.PROTOCOL_TLSv1_2)文件“<>/python3.6/lib/python3.6/ssl.py”,第 1232 行,在 get_server_certificate使用 context.wrap_socket(sock) 作为 sslsock:文件“<>/python3.6/lib/python3.6/ssl.py”,第 407 行,在 wrap_socket _context=self,_session=session) 文件“<>/python3. 6/lib/python3.6/ssl.py”,第 817 行,在init self.do_handshake() 文件“<>/python3.6/lib/python3.6/ssl.py”,第 1077 行,在 do_handshake self. _sslobj.do_handshake() 文件“<>/python3.6/lib/python3.6/ssl.py”,第 689 行,在 do_handshake self._sslobj.do_handshake() ssl.SSLEOFError: EOF 发生违反协议 (_ssl. c:852)

以下是代码片段:

    import socket
    import ssl
    
    hostname = <DB_Endpoint>
    context = ssl.create_default_context()
    
    with socket.create_connection((hostname, 8200)) as sock:
        with context.wrap_socket(sock, server_hostname=hostname) as ssock:
            print(ssock.version())
    

标签: pythonpostgresqlsocketssslopenssl

解决方案


推荐阅读