Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SSL验证替代域_Python_Security_Ssl_Openssl_Tls1.3 - Fatal编程技术网

Python SSL验证替代域

Python SSL验证替代域,python,security,ssl,openssl,tls1.3,Python,Security,Ssl,Openssl,Tls1.3,我打算通过TLS连接到远程主机example.com,但我必须通过DNS名称为example-proxy.com的代理IP地址进行连接 我无法控制SSL证书,也无法要求example.com上的管理员将example-proxy.com添加到其证书的SAN中 使用example-prxoy.com会导致错误,因为主机名与证书中的名称不匹配。如何将主机参数拆分为两个:(1)用于网络连接的域名和(2)用于证书验证的域名 我没有资源修改OpenSSL库,但我可以对Python库进行更改。根据,我本可以

我打算通过TLS连接到远程主机example.com,但我必须通过DNS名称为example-proxy.com的代理IP地址进行连接

我无法控制SSL证书,也无法要求example.com上的管理员将example-proxy.com添加到其证书的SAN中

使用example-prxoy.com会导致错误,因为主机名与证书中的名称不匹配。如何将主机参数拆分为两个:(1)用于网络连接的域名和(2)用于证书验证的域名

我没有资源修改OpenSSL库,但我可以对Python库进行更改。根据,我本可以修改该方法来实现此功能,但在Python3.7+中不再可用

询问

  • 如何使用Python 3.7+同时指定主机名和证书名
  • 从安全角度看,我的实现怎么会出错

  • 只需为TCP连接和TLS握手提供不同的主机名,即在
    wrap\u socket
    中设置
    server\u主机名。要对此进行修改,请执行以下操作:

    import socket
    import ssl
    
    tls_hostname = 'www.example.com'
    context = ssl.create_default_context()
    
    with socket.create_connection(('127.0.0.1',8443)) as sock:
        with context.wrap_socket(sock, server_hostname=tls_hostname) as ssock:
            print(ssock.version())
    
    这将连接到
    ('127.0.0.1',8443)
    ,但使用
    www.example.com
    进行TLS握手。
    请注意,对于tls握手中的SNI扩展和验证证书,这将使用
    tls\u主机名
    。但基于您的问题,这似乎是您需要的:连接到IP:port,但使用特定主机名进行TLS握手和验证。

    最佳做法是创建自签名CA证书(从技术上讲,它们都是自签名的)然后使用该CA为
    example.com
    签署证书,并将其安装在
    example proxy.com
    上。然后您可以将CA安装到运行Python代码的计算机的信任存储中。此外,示例代理是L3 TCP/IP代理,它不干预TLS握手。我也没有网络管理员权限,也不能更改DNS记录。我明白了,是的,使用TCP代理你真的什么都做不了。您使用的是
    请求
    还是普通的
    urllib
    ?看看是否有帮助。我直接使用ssl包中的SSLSocket。那么呢?谢谢!成功了。你看到这个配置可能会出现的任何安全漏洞吗?@约翰:主机名验证点是,证书与预期的主机名匹配,以防止中间人攻击中的主动人。这里的期望是明确的。这意味着不存在由此带来的安全问题。