微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Urllib3和MITMProxy:sslv3警报握手失败 尝试卷曲:

如何解决Urllib3和MITMProxy:sslv3警报握手失败 尝试卷曲:

我的客户端位于urllib3 HTTPSConnectionPool上。我已经在服务器上安装了SSL版本1证书,并且可以根据要求正常运行。

Certificate for my server

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 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证书,我可以肯定它。

HTTPS Proxy Certificate

我想知道。如何为我的urllib3客户端启用版本3证书。

更新:

我的证书都是自签名的。当我启动mitmproxy而不定义我的ca证书时。它提供了Bad Gateway,这很明显,因为它将不信任我的证书。

Certificate verification error for cod****.com: unable to get local issuer certificate (errno: 20,depth: 0)

但是当我在启动mitmproxy时定义我的ca证书时

mitmweb --cacerts cod *****。com = new-cacert.pem

发生先前的堆栈跟踪

尝试卷曲:

curl -X GET“ https://cod*****.com:8000” --cacert new / new-cacert.pem --proxy 127.0.0.1:6666

也给出以下响应,但在没有代理的情况下可以正常工作

curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure

解决方法

证书的版本与您看到的错误无关。证书版本是关于X509v1与X509v3证书的比较,您最好使用后者。该错误是关于TLS协议版本的。 X509v1和X509v3证书都可以与不同的TLS协议版本一起使用,因此这两个“版本”彼此无关。

该错误消息也可能不是真正的TLS协议版本。我的猜测是,您只是尝试使用HTTPS访问纯HTTP站点。对此的一个指示是端口8000的使用,该端口通常与纯HTTP相关联。

将HTTPS请求发送到纯HTTP服务器时,通常会收到一个普通HTTP响应,抱怨无效的HTTP请求(由于使用了HTTPS而不是纯HTTP,因此无效)。尽管客户端不希望将这种简单的HTTP响应解释为TLS,并且响应中的特定字节序列也将被解释为TLS协议版本-即使不是用这种方式解释。然后,这会导致您看到错误消息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。