Java https proxy(使用 https.proxyPort 和 https.proxyHost)
我正在制作一个依赖于设置和的Java应用程序。有两个进程:一个是常规程序,另一个是代理。我有一个简单的套接字侦听器运行(我控制)。就像http.proxyPort
http.proxyHost
http.proxyPort
while (true) {
try {
Socket connection = server.accept();
Handler handler = new Handler(connection);
handler.start();
} catch (Exception ex) {
ex.printStackTrace();
}
}
因此,每当“进程1”发出http请求时 - 例如
URL yahoo = new URL("http://www.google.ca/");
URLConnection yc = yahoo.openConnection();
System.out.println(yc.getClass().getName());
BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
它通过代理。现在,如果客户端使用 HTTPS 协议,该怎么办?喜欢改用?有一个属性和,但我真的已经尝试了几个月(断断续续,这不是太重要),没有运气。我已经阅读了一堆线程(我会在最后列出一些,所以你知道我做了什么)。https://google.ca
https.proxyPort
https.proxyHost
到目前为止,我最近的尝试:服务器
try {
System.setProperty("javax.net.ssl.keyStore", "test.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "2520xe");
SSLServerSocketFactory sslserversocketfactory =
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslserversocket =
(SSLServerSocket) sslserversocketfactory.createServerSocket(9999);
System.out.println("Ready");
SSLSocket sslsocket = (SSLSocket) sslserversocket.accept();
InputStream inputstream = sslsocket.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
OutputStream toClient = sslsocket.getOutputStream();
toClient.write(("HTTP/1.0 200 Connection established\n" +
"Content-Length: " + "Shut down!".getBytes().length
+ "\r\n").getBytes("utf-8"));
toClient.write("Shut down!".getBytes("utf-8"));
toClient.close();
} catch (Exception exception) {
exception.printStackTrace();
}
客户
try {
System.setProperty("https.proxyHost", "127.0.0.1");
System.setProperty("https.proxyPort", "9999");
URL yahoo = new URL("https://www.google.ca/");
URLConnection yc = yahoo.openConnection();
System.out.println(yc.getClass().getName());
BufferedReader in = new BufferedReader(
new InputStreamReader(
yc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
} catch (Exception ex) {
ex.printStackTrace();
}
我得到这个错误,我谷歌了它,但想出了一些邮件的东西。javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
基本上,我需要创建一个java代理服务器,该服务器由https.proxyPort
和https.proxyHost
标志设置为客户端,并且可以将数据发送回客户端应用程序,该应用程序可能不会以任何方式进行修改(它只是使用URL连接=new URL(“https://...”)
)
我尝试过的几个网站...
- 创建一个接受 HTTPS 的 Java 代理服务器
- http://stilius.net/java/java_ssl.php
- 关于让Java接受所有证书还有其他一些东西,但我找不到任何链接。我有代码,但我遇到的错误比我现在正在做的事情更多,但是如果它有帮助,我可以包含它(我最初没有,因为这已经是一个很长的问题)