サーバー: Linux
テスト済みクライアント: OS X、CentOS、Windows
サーバー/クライアント プログラミング言語: Java
Server-side
SSLServerSocketFactory sslserversocketfactory =
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslserversocket =
(SSLServerSocket) sslserversocketfactory.createServerSocket(9999);
SSLSocket sslsocket = (SSLSocket) sslserversocket.accept();
InputStream inputstream = sslsocket.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
String string = null;
while ((string = bufferedreader.readLine()) != null) {
System.out.println(string);
System.out.flush();
}
このオプションで実行されるサーバー プログラム
-Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456
証明書: Linux で keytool を使用して作成
keytool -genkey -keystore mySrvKeystore -keyalg RSA
クライアント側
....
SocketAddress sa = new InetSocketAddress(ip, port);
....
SSLContext sslContext = SSLContext.getInstance("SSL");
....
sslContext.init(.........., new SecureRandom());
SSLSocketFactory socketFactory = sslContext.getSocketFactory();
this.clientSock = socketFactory.createSocket();
this.clientSock.connect(sa, this.ConnectTimeout);
this.clientSock.setSoTimeout(this.RecvTimeout);
this.clientSock.setReuseAddress(true);
....
public boolean writeTo(String procname, BufferedOutputStream out, byte[] data)
{....
out.write(data, 0, data.length);
out.flush();
....}
結果:すべてが正常に動作しますが、Windows からのクライアント プログラムのみで、出力ストリームへの書き込み時に遅延が発生します。
- SSL ソケット接続が確立されました
- 出力/入力ストリームの設定
- データを出力ストリームに書き込む
- 流す
...4〜5秒間、この時点で理由もなくここで動かなくなりました...
- 近い
遅延は、Windows 7、Windows XP から実行されている同じ Java クライアントの単純なプログラムで発生します。3 つの異なる Windows マシンでテスト済み。他のどこでもうまく機能します。
そこで、C と PHP を使用して SSL のシンプルなクライアントを構築しようとしましたが、Windows でうまく動作します。つまり、Java クライアント メソッドのみが機能していません。
誰かが以前にアイデアや同様の経験をしたことがありますか? WINS/DNS を疑う投稿を見たことがありますが、ここではそうではないようです。また、面白いことに、すべての Windows マシンから常に約 4 ~ 5 秒の遅延が発生します。
コメントありがとうございます。