プレゼンス サーバー (Openfire) のポート 5223 に接続する単純な Java クライアントを作成しようとしています。プレゼンス サーバーのドキュメントによると、このポートは安全な TLS 接続のみをサポートしています。
そこで、以下のコードを使用して 5223 ポートに接続しようとしました。
SSLSocketFactory factory=(SSLSocketFactory)SSLSocketFactory.getDefault();
SSLSocket socket= (SSLSocket)factory.createSocket("host",5223);
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
BufferedWriter writer =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));
writer.write("some data");
writer.flush();
char r0[]= new char[600];
reader.read(r0);
System.out.println(r0);
これは正常に機能し、(wireshark で) 送信したデータと受信した応答が暗号化されていることがわかりました。
次に、以下のコードを試しました
Socket socket=new Socket("host", 5223);
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
BufferedWriter writer =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));
writer.write("some data");
writer.flush();
char r0[]= new char[600];
reader.read(r0);
System.out.println(r0);
驚いたことに(私にとって)これもうまくいきます。唯一の問題は、最初に 7 バイトの予期しない応答があったことです。しかし、その応答をスキップすると、他のすべての応答は正常に機能しているように見え、データが暗号化されていることもわかりました (wireshark を使用)。
私は混乱しています。Socket クラス自体が安全な通信を提供できる場合、なぜ SSLSocket クラスを使用する必要があるのでしょうか。
どんな助けでも大歓迎です。