教育目的で 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 を話していますが、これは SOCKS コマンドだと思いますCONNECT
(確かではありませんが)。Firefox の SOCKS 設定で何も設定していません。以下は、Firefox のプロキシ設定のスクリーンショットです。
ここで何が欠けていますか?! これを Firefox やその他のブラウザで動作させるにはどうすればよいですか?!
-------------------------------------------------- ----------------------------
これが別の質問の重複であり、別の質問で回答されていると思われる場合は、次のように言わなければなりません。はい、両方の質問は同様の問題に根ざしていますが、引用された質問の唯一の回答はSSLソケットの使用を指示しています誤解を招くことが判明し、この新しい質問になりました。したがって、それらは同様の問題を対象としていますが、この質問は、問題を解決するための完全に異なる、しかも誤解を招く道筋を示しているため、将来そのような問題に直面する人に役立つガイダンスを提供できます.