gpt4 book ai didi

java - 用 Java 实现一个简单的 HTTPS 代理应用程序?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:02:28 24 4
gpt4 key购买 nike

出于教育目的,我正在使用 Java 编写一个简单的 HTTPS 代理程序。我的程序在端口(例如 7443)上监听来自浏览器(例如 Firefox)的传入 HTTPS 请求,解析请求并将其转发到所需的目的地(例如 https://www.comodo.com) .

Firefox 的代理设置设置为使用我的端口进行 SSL 连接 (127.0.0.1: 7443)。

我的代码简短:

static // initializer
{
System.setProperty("javax.net.ssl.keyStore", "MyKeyStore");
System.setProperty("javax.net.ssl.keyStorePassword", "password");
}

SSLServerSocketFactory ssFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();

try {
SSLServerSocket listener = (SSLServerSocket) ssFactory.createServerSocket(port, 64);
listener.setUseClientMode(false);
listener.setWantClientAuth(false);
listener.setNeedClientAuth(false);

SSLSocket connection = (SSLSocket) listener.accept();
browser.startHandshake(); /* <<== Exception throws at this line */

} catch (IOException ex) {
ex.printStackTrace(System.err);
}

但我发现了以下异常:

    javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

异常表示连接可以是纯文本,但只有来自 Firefox 的 HTTPS 连接设置为使用此端口。我已经记录了 Firefox 发送到我的应用程序的内容:

CONNECT www.comodo.com:443 HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0
Proxy-Connection: keep-alive
Connection: keep-alive
Host: www.comodo.com

Firefox 正在谈论 palin-text,我认为 CONNECT 是一个 SOCKS 命令(虽然我不确定),我没有在 Firefox 的 SOCKS 设置中设置任何东西。下面是 Firefox 代理设置的截图:

Firefox Proxy Settings

我在这里错过了什么?!我需要做什么才能在 Firefox 或任何其他浏览器上使用它?!

-------------------------------------------- --------------------------------

对于那些认为这是 another question 的副本并且已在另一个问题中得到回答的人,我不得不说:是的,这两个问题都源于类似的问题,但引用问题中的唯一答案是使用 SSL结果证明是误导的套接字并导致了这个新问题。因此,尽管他们针对的是类似的问题,但这个问题显示了解决问题的完全不同但具有误导性的路径,因此它可以为 future 面临此类问题的人提供有用的指导。

最佳答案

去掉所有的 SSL。只需处理传入的 CONNECT 命令,与上游服务器建立明文连接,然后开始复制字节。浏览器和服务器会使用 SSL,但您根本不需要。

关于java - 用 Java 实现一个简单的 HTTPS 代理应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16358589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com