我的客户在urllib3 HTTPSConnectionPool。我已经在服务器上安装了SSL版本1证书,它可以在请求时正常工作。

在下一个HTTPSConnectionPool实例中,我使用了一个代理来拦截。问题是客户端退出时有以下跟踪:
Traceback (most recent call last):
File "/home/user/Documents/project/cert-pinning/lib/python3.8/site-packages/urllib3/connectionpool.py", line 667, in urlopen
self._prepare_proxy(conn)
File "/home/user/Documents/project/cert-pinning/lib/python3.8/site-packages/urllib3/connectionpool.py", line 932, in _prepare_proxy
conn.connect()
File "/home/user/Documents/project/cert-pinning/lib/python3.8/site-packages/urllib3/connection.py", line 362, in connect
self.sock = ssl_wrap_socket(
File "/home/user/Documents/project/cert-pinning/lib/python3.8/site-packages/urllib3/util/ssl_.py", line 384, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
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 1040, in _create
self.do_handshake()
File "/usr/lib/python3.8/ssl.py", line 1309, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1123)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "client2.py", line 76, in <module>
r = pool_with_proxy.urlopen('GET', '/')
File "/home/user/Documents/project/cert-pinning/lib/python3.8/site-packages/urllib3/connectionpool.py", line 754, in urlopen
return self.urlopen(
File "/home/user/Documents/project/cert-pinning/lib/python3.8/site-packages/urllib3/connectionpool.py", line 754, in urlopen
return self.urlopen(
File "/home/user/Documents/project/cert-pinning/lib/python3.8/site-packages/urllib3/connectionpool.py", line 754, in urlopen
return self.urlopen(
File "/home/user/Documents/project/cert-pinning/lib/python3.8/site-packages/urllib3/connectionpool.py", line 726, in urlopen
retries = retries.increment(
File "/home/user/Documents/project/cert-pinning/lib/python3.8/site-packages/urllib3/util/retry.py", line 439, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: TestHTTPSConnectionPool(host='https://cod-avatar.com', port=8000): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1123)')))我很确定这是由于HTTPS_PROXY的第3版证书。

我想知道。如何为我的urllib3客户端启用第3版证书。
更新:
我的证书都是自签的。当我启动mitmproxy时,没有定义我的ca证书。它给了坏网关,这是显而易见的,因为它不信任我的证书。
Certificate verification error for cod****.com: unable to get local issuer certificate (errno: 20, depth: 0)
但是当我在启动mitmproxy时定义我的ca-certs时
mitmweb --仙人掌鳕鱼*..com=新仙人掌.new
发生上一次堆栈跟踪。
卷曲:
curl -X GET "https://cod*****.com:8000“-新的/新的-coert.pem-代理127.0.0.1:6666
也会给出以下响应,但是没有代理就能正常工作。
curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
发布于 2020-09-29 05:43:38
证书的版本与您看到的错误无关。证书版本是关于使用X509v1和X509v3证书的,您应该更好地使用后者。错误是关于TLS协议版本的。X509v1和X509v3证书都可以与不同的TLS协议版本一起使用,因此两个“版本”与另一个版本无关。
而且错误消息可能也不太符合TLS协议版本。相反,我的猜测是,您只是尝试使用HTTPS访问一个普通的HTTP站点。这方面的一个指示符是端口8000的使用,它通常与普通HTTP相关联。
当向普通HTTP服务器发送HTTPS请求时,通常会得到一个简单的HTTP响应,抱怨HTTP请求无效(因为使用了HTTPS而不是普通HTTP )。这个简单的HTTP响应将被客户端解释为TLS,响应中的一个特定字节序列将被解释为TLS协议版本--尽管它不是这样解释的。这将导致您看到的错误消息。
https://stackoverflow.com/questions/64113381
复制相似问题