首页 > 解决方案 > 使用 selenium 访问网站时无法与客户端建立 TLS

问题描述

我正在尝试运行 Mitmdump 来收集 HTTP/HTTPS 请求。当我在mitmdump里面运行时venv,它报告:

Proxy server listening at http://*:8080
127.0.0.1:43382: clientconnect
127.0.0.1:43384: clientconnect
127.0.0.1:43382: GET http://detectportal.firefox.com/success.txt
              << 200 OK 8b
127.0.0.1:43390: clientconnect
127.0.0.1:43392: clientconnect
127.0.0.1:43390: GET http://detectportal.firefox.com/success.txt?ipv4
              << 200 OK 8b
127.0.0.1:43384: CONNECT location.services.mozilla.com:443
 << Cannot establish TLS with client (sni: location.services.mozilla.com): TlsException("SSL handshake error: Error([('SSL routines', 'ssl3_read_bytes', 'tlsv1 alert unknown ca')],)",)

我想这可能是由错误的 CA 引起的。我用的CA got from mitmproxy/test/mitmproxy/data/confdir,是的mitmproxy-ca-cert.pem,几个月前可以用,现在不行了,我也试过/root/.mitmproxy/mitmproxy-ca.crt了,报同样的错误。我真的不知道为什么。(T^T)

任何帮助将不胜感激!

以下是一些环境信息:

Mitmproxy: 5.2
Python:    3.6.5
OpenSSL:   OpenSSL 1.1.1g  21 Apr 2020
Platform:  Linux-5.4.0-42-generic-x86_64-with-Ubuntu-18.04-bionic
Firfox: 75.0
Selenium: 3.14
geckodriver: 0.25.0

以下是我用来设置 CA 的命令:

openssl x509 -in /root/.mitmproxy/mitmproxy-ca-cert.pem -inform PEM -out /root/.mitmproxy/mitmproxy-ca.crt
cp /root/.mitmproxy/mitmproxy-ca.crt /usr/share/ca-certificates/extra/mitmproxy-ca.crt
echo "extra/mitmproxy-ca.crt" >> /etc/ca-certificates.conf
update-ca-certificates

我用来访问网站的代码是:

opts = FirefoxOptions()
opts.add_argument("--headless")
browser = webdriver.Firefox(firefox_options=opts, seleniumwire_options={'verify_ssl': False})
browser.header_overrides = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0'}
browser.get(url)

标签: seleniumsslmitmproxy

解决方案


mitmproxy 在启动时自动生成其 CA 证书~/.mitmproxy/。如果您的客户端不信任此证书,则连接将失败。也可以http://mitm.it在使用mitmproxy的时候访问安装。


推荐阅读