我正在创建一个Java应用程序,该应用程序允许我拦截来自客户端的HTTP / HTTPS请求到服务器,然后将响应从服务器发送到客户端。为此,我使用Java SSLSocket类,拦截通过本地端口的所有流量(它基本上像代理服务器一样工作)。
当客户端连接到使用Google Chrome浏览器或Firefox实施SSL协议(例如https://www.google.com)的主机时,就会出现我的问题。 在这种类型的连接中,我的应用程序引发以下错误:
收到致命警报:certificate_unknown sslsocket
在Firefox浏览器本身中,如果我访问https://www.google.com,则会显示警告窗口,并显示以下错误:
MOZILLA_PKIX_ERROR_MITM_DETECTED
到目前为止,我已经按照URL https://sites.google.com/site/ddmwsst/create-your-own-certificate-and-ca中的说明进行了操作,以创建一个CA证书,并与我签署了一个自签名证书。这两个证书都存储在名为“ proxy-ks.jks”的密钥库中,并且CA证书已导入Windows信任的CA证书列表中。
完成上述操作后,我只需通过上述keyStore的别名(“ proxy-ks.jks”)将自签名证书上传到Java应用程序中,然后将其用于与服务器的通信中即可。
因此,我应该为与客户端通信的每个主机创建一个证书并将其存储在keyStore中,而不是对所有主机都使用一个证书吗?用Java有什么简单的方法吗?
非常感谢您的帮助。
编辑:
总而言之,我要做的就是以下链接的第2步:https://security.secure.force.com/security/tools/webapp/zapbrowsersetup
基本上是Burp Suite或ZaPProxy的工作方式。
EDIT2:
当然,此应用程序并非旨在攻击任何人或任何人(也许我一开始就应该明确表示歉意)。 这是我最终学位项目的一部分。