タイトルはそれを言います。
ServerSocketとSSLServerSocketを同じポートにバインドしようとすると、エラーが発生します。クライアントがSSLなしでSSLServerSocketに接続しようとすると、accept()メソッドはエラーをスローします。クライアントがSSL経由でServerSocketに接続しようとした場合、安全な接続を確立する方法がわかりません。
それも可能ですか?
SSLSocketFactory.createSocket(Socket s, String host, int port, boolean autoClose)
通常のソケット接続を受け入れ、後の段階で(およびSSLSocket.setUseClientMode(false)
サーバー側で)を使用してSSL/TLSにアップグレードできます。
平文プロトコルでコマンドを定義して、アップグレードの実行について双方が合意できるようにする必要があります(STARTTLS
たとえば、SMTPまたはLDAPのコマンドと同様)。
または、ポートの統合を使用して(Grizzlyで実行できるように)、クライアントがSSL/TLSクライアントのHelloメッセージで接続を開始したかどうかを検出しようとすることもできます。パケットタイプを検出するために先読みする必要があるため、実行が難しい場合があります(したがって、直接SSLEngine
使用するのではなく、そのバッファを保持してその内容をに渡す必要がありSSLSocket
ます)。