OWASP ZAP 无法与某些网站建立代理 TLS 连接

OWASP ZAP 无法与某些网站建立代理 TLS 连接

问题:

我似乎无法使用 OWASP ZAP 拦截某些网站的 HTTPS 流量。

我已获得相关网站运营商的许可,可以“抓取”这些网站的数据,以便从订购和 SharePoint 门户下载数据。

出于开发/调试目的,我以前使用 OWASP ZAP 作为调试代理,但我怀疑这些站点的 TLS 升级阻止我现在这样做。


示例 URL:

我以前可以通过 ZAP 加载但现在无法再加载的 HTTPS URL 示例是NBN Co 客户门户

(这不是针对普通大众的,但您不需要登录就可以重现该问题,所以我觉得在这里提供它没问题。)

需要明确的是,我的抓取代码仍然可以很好地连接到网站,但通过 OWASP ZAP 的浏览器(例如 Firefox)无法做到这一点。


错误信息:

ZAP Error [javax.net.ssl.SSLException]: Received fatal alert: close_notify

Stack Trace:
javax.net.ssl.SSLException: Received fatal alert: close_notify
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
    at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2011)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1113)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1363)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1391)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1375)
    at org.parosproxy.paros.network.SSLConnector.createSocket(Unknown Source)
    at org.apache.commons.httpclient.HttpConnection.open(Unknown Source)
    at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361)
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(Unknown Source)
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(Unknown Source)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
    at org.parosproxy.paros.network.HttpSender.executeMethod(Unknown Source)
    at org.parosproxy.paros.network.HttpSender.runMethod(Unknown Source)
    at org.parosproxy.paros.network.HttpSender.send(Unknown Source)
    at org.parosproxy.paros.network.HttpSender.sendAuthenticated(Unknown Source)
    at org.parosproxy.paros.network.HttpSender.sendAndReceive(Unknown Source)
    at org.parosproxy.paros.network.HttpSender.sendAndReceive(Unknown Source)
    at org.parosproxy.paros.core.proxy.ProxyThread.processHttp(Unknown Source)
    at org.parosproxy.paros.core.proxy.ProxyThread.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)

我上面给出的示例网站的错误在网络上的几个地方提到过,它表现为502 Bad Gateway来自网站的响应,但作为200 OkZAP 向浏览器返回的文本/纯文本响应。但是,消息本身提到了 ZAP,因此显然不是网站生成了 502。

当在谷歌上搜索该错误时,大多数文章建议调整 Java 或 ZAP TLS 协议和密码和/或升级 Java 或 OWAZP ZAP。

在其他一些网站上,我之前能够调整代理 TLS 设置来代理一些更现代的 TLS 站点配置(例如:在 ZAP 中:通过Tools> Option>关闭旧协议Local proxy

上面的示例网站并没有给我带来任何好运。


重现步骤:

  1. 创建并启动新的空的 Firefox 配置文件

firefox --no-remote -ProfileManager

创建一个名为“代理”的新空白配置文件,重新选择您的默认配置文件(用于下次启动),然后退出。

firefox --no-remote -P proxy &

  1. 使用 Java 8 安装最新版本的 OWASP ZAP

我将使用 Docker 来帮助重现该问题。

Dockerfile:

FROM java:8

ENV ZAP_VERSION 2.5.0
RUN apt-get update && apt-get clean
RUN apt-get install -q -y wget && apt-get clean
RUN mkdir /zap
RUN cd /zap && wget https://github.com/zaproxy/zaproxy/releases/download/${ZAP_VERSION}/ZAP_${ZAP_VERSION}_Linux.tar.gz
RUN cd /zap && tar zxvf ZAP_${ZAP_VERSION}_Linux.tar.gz
RUN apt-get install -q -y sudo xauth libxrender1 libxtst6 libxi6 net-tools less && apt-get clean

RUN export uid=1000 gid=1000 && \
    mkdir -p /home/developer && \
    echo "developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash" >> /etc/passwd && \
    echo "developer:x:${uid}:" >> /etc/group && \
    echo "developer ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/developer && \
    chmod 0440 /etc/sudoers.d/developer && \
    chown ${uid}:${gid} -R /home/developer && \
    chown -R 1000 /home/developer/ && \
    chmod -R u+rw /home/developer/

USER developer
ENV JAVA_HOME /opt/java
ENV PATH $JAVA_HOME/bin:/zap/ZAP_${ZAP_VERSION}/:$PATH
ENV HOME /home/developer

EXPOSE 8080
CMD /zap/ZAP_${ZAP_VERSION}/zap.sh -host 0.0.0.0 -port 8080 -newsession `date --iso-8601=s`

构建为:

docker build -t zaproxy:2.5.0 .

运行身份:

mkdir -p $HOME/.ZAP
docker run \
  --rm \
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -v $HOME/.ZAP:/home/developer/.ZAP \
  -p 8080:8080 \
zaproxy:2.5.0 &
  1. 生成并保存 OWASP 根 CA

在 zaproxy 中,Tools>>OptionsDynamic SSL Certificates

Generate(如果尚不存在),复制到 Firefox 可访问的文本文件。

  1. 在 Firefox 中安装已保存的 OWASP 根 CA

Preferences> Advanced> Cerfificates> View Certificates>Authorities

Import> 选择您保存的证书 > Open

  1. 通过 OWASP ZAP 代理所有 Firefox 网络协议

Preferences> Advanced> Network> Settings>Manual proxy configuration

配置为:

  • HTTP Proxy:127.0.0.1
  • Port:8080
  • 打钩Use this proxy server for all protocols

然后点击Ok

  1. 访问https://google.com以测试代理是否正常工作

您应该在 OWASP ZAP 的下方窗格中看到拦截的 HTTPS 请求。

  1. 访问损坏的 URL演示错误

答案1

每个 zaproxy-users 邮件列表:

  • 远程 Web 服务器不接受 TLS 连接
  • 更改“本地代理”设置无济于事,但“连接”设置可能会有帮助

我在“连接”(出站)选项选项卡中禁用了 TLS 1.1 和 1.2,然后我就可以代理该域了。

相关内容