问题:
我似乎无法使用 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 Ok
ZAP 向浏览器返回的文本/纯文本响应。但是,消息本身提到了 ZAP,因此显然不是网站生成了 502。
当在谷歌上搜索该错误时,大多数文章建议调整 Java 或 ZAP TLS 协议和密码和/或升级 Java 或 OWAZP ZAP。
在其他一些网站上,我之前能够调整代理 TLS 设置来代理一些更现代的 TLS 站点配置(例如:在 ZAP 中:通过Tools
> Option
>关闭旧协议Local proxy
)
上面的示例网站并没有给我带来任何好运。
重现步骤:
- 创建并启动新的空的 Firefox 配置文件
firefox --no-remote -ProfileManager
创建一个名为“代理”的新空白配置文件,重新选择您的默认配置文件(用于下次启动),然后退出。
firefox --no-remote -P proxy &
- 使用 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 &
- 生成并保存 OWASP 根 CA
在 zaproxy 中,Tools
>>Options
Dynamic SSL Certificates
Generate
(如果尚不存在),复制到 Firefox 可访问的文本文件。
- 在 Firefox 中安装已保存的 OWASP 根 CA
Preferences
> Advanced
> Cerfificates
> View Certificates
>Authorities
Import
> 选择您保存的证书 > Open
- 通过 OWASP ZAP 代理所有 Firefox 网络协议
Preferences
> Advanced
> Network
> Settings
>Manual proxy configuration
配置为:
HTTP Proxy
:127.0.0.1Port
:8080- 打钩
Use this proxy server for all protocols
然后点击Ok
- 访问
https://google.com
以测试代理是否正常工作
您应该在 OWASP ZAP 的下方窗格中看到拦截的 HTTPS 请求。
- 访问损坏的 URL演示错误。
答案1
每个 zaproxy-users 邮件列表:
- 远程 Web 服务器不接受 TLS 连接
- 更改“本地代理”设置无济于事,但“连接”设置可能会有帮助
我在“连接”(出站)选项选项卡中禁用了 TLS 1.1 和 1.2,然后我就可以代理该域了。