【发布时间】:2012-08-31 10:26:09
【问题描述】:
我在Tomcat下开发了一个代理servlet,servlet接收客户端的请求并转发到另一个代理服务器,在转发之前,它会与代理服务器进行身份验证。现在它可以很好地处理 HTTP 请求但无法接收 HTTPS 请求。所以这个代理 servlet 并不完美。
我在这个论坛上搜索了谷歌并阅读了很多帖子,尤其是这个:
Developing a proxy servlet that can handle HTTPS connections
我配置Tomcat监听8443端口,如下:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
keystoreFile="${user.home}/.keystore" keystorePass="changeit"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" redirectPort="8080"/>
我在 eclipse 中本地部署了 servlet,并将浏览器代理设置为 127.0.0.1:8080,但绕过它访问 localhost。
当我浏览 https://localhost:8443/ 时,我可以看到在 servlet 日志中收到的 https 请求(通过调用 request.getScheme() 和 request.isSecure())。但是如果我浏览https://www.google.com,它就无法连接,并且我的代理 servlet 没有捕获到请求。
我还重写了 service() 方法并打印了 request.getMethod(),但仍然未能捕获 HTTPS 请求。
我该怎么办?
我想要的只是获取 HTTPS 请求并添加身份验证并转发到下一个代理服务器。
谢谢
【问题讨论】:
-
为什么要实施中间人攻击?
-
an 所以很明显这不起作用。如果您使用代理拦截并在中间切换证书,则无法验证 SSL 证书。这是一个安全限制。
-
如果你只是想要一个代理服务器,你应该试试这个servletsuite.com/servlets/httpproxy.htm
-
我们使用代理进行压缩,代理servlet用于进行身份验证和一些统计工作。
-
我看到了你的链接,好像支持https请求。我会检查它,但不确定如何使用代理服务器进行身份验证。
标签: java tomcat servlets https