首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Urllib3 & MITMProxy: sslv3警报握手失败

Urllib3 & MITMProxy: sslv3警报握手失败
EN

Stack Overflow用户
提问于 2020-09-29 05:24:08
回答 1查看 1K关注 0票数 0

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

在下一个HTTPSConnectionPool实例中,我使用了一个代理来拦截。问题是客户端退出时有以下跟踪:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 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协议版本--尽管它不是这样解释的。这将导致您看到的错误消息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64113381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档