Java 仍然无法在代理servlet中处理HTTPS请求

Java 仍然无法在代理servlet中处理HTTPS请求,java,tomcat,servlets,https,Java,Tomcat,Servlets,Https,我在Tomcat下开发了一个代理servlet,该servlet接收来自客户端的请求并转发到另一个代理服务器,在转发之前,它将与代理服务器进行身份验证。现在它可以很好地处理HTTP请求,但无法接收HTTPS请求。所以这个代理servlet并不完美 我搜索过谷歌,在这个论坛上读了很多帖子,尤其是这篇: 我将Tomcat配置为在端口8443上侦听,如下所示: <Connector port="8443" protocol="org.apache.coyote.http11.Http11Pro

我在Tomcat下开发了一个代理servlet,该servlet接收来自客户端的请求并转发到另一个代理服务器,在转发之前,它将与代理服务器进行身份验证。现在它可以很好地处理HTTP请求,但无法接收HTTPS请求。所以这个代理servlet并不完美

我搜索过谷歌,在这个论坛上读了很多帖子,尤其是这篇:

我将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()。但是如果我浏览,它就无法连接,我的代理servlet也无法捕获请求

我还重写了service()方法并打印request.getMethod(),但仍然无法捕获HTTPS请求

我该怎么办

我只想得到HTTPS请求,添加身份验证并转发到下一个代理服务器


谢谢

这不是SSL代理的工作方式。如果将HTTPS代理设置为
localhost:8080
,则浏览器将尽职尽责地连接到
localhost:8080
,并使用
connect
动词通过HTTP代理连接隧道SSL流量。不这样做,,SSL不会特别安全,任何代理服务器管理员都可以在下次有人决定从亚马逊购买东西、检查银行余额、注册定期付款成人娱乐网站或其他需要SSL的活动时,轻松阅读自己的信用卡详细信息

您似乎没有告诉您的浏览器关于端口8443上的新SSL代理的任何信息,因此我不确定您为什么认为会使用它。不会的。您可以告诉浏览器使用基于SSL的代理服务器-即,将代理设置为
https://localhost:8443
,但即使如此,它也将使用基于
连接的SSL隧道,因此除了更慢的连接之外,没有其他意义


如果您真正需要做的只是将此请求转发到另一个代理,则需要将
CONNECT
方法转发到上游代理,并包含适当的身份验证信息。

为什么要实施中间人攻击?很明显,这是行不通的。如果您用代理截取并在中间切换证书,则无法验证SSL证书。这是一个安全限制。如果你只是想要一个代理服务器,你应该试试这个。我们使用代理进行压缩,代理servlet用于进行身份验证和一些统计工作。我看到了你的链接,它似乎支持https请求。我将检查它,但不确定如何使用代理服务器进行身份验证。我尝试将代理设置为8080和8443,但两者都无法接收CONNECT命令。有什么想法吗?