2016-10-23 5 views
0

は、私はWindowsでのJavaに基づくマルチサーバチャットシステムを書きました。セキュリティー部分では、SSLSocketを作成するためのキーストアを1つ作成しました。私は3台のサーバを起動すると、それは、Windows(Win10 14393.321)上で動作しますが、OS X(バージョン10.12(16A323))およびLinux(Ubuntuの14.04.4 LTS)に失敗しました。それは本当に私を混乱させた。ここでは、キーストアの一部です:Java SSLSocketを使用している場合、WindowsとLinux/OS Xの違いは何ですか?

System.setProperty("javax.net.ssl.keyStore",keyFilepath); 
System.setProperty("javax.net.ssl.trustStore",keyFilepath); 
System.setProperty("javax.net.ssl.keyStorePassword","password"); 
System.setProperty("javax.net.ssl.trustStorePassword", "password"); 

そして私はOS XまたはLinux上の第三のサーバを実行すると、それは示しています

java.net.ConnectException:接続は、Javaで

を拒否しました。 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)でnet.PlainSocketImpl.socketConnect java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)での(ネイティブメソッド) で をjava.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)で java.net.Socket.connect(Socket.java:589)at sun.security.ssl.SSLSocketImplでsun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:668)(SSLSocketImpl.java:427) sun.security.ssl.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.javaで: 88) で sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッドで server.AuthorizeServer.main(AuthorizeServer.java:64でserver.AuthorizeServer.MessageReceive(AuthorizeServer.java:99)))sun.reflect.NativeMethodAccessorImplで .invoke(NativeMethodAccessorImpl.java:62)java.lang.reflect.Method.invokeで でsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) (Method.java:497) org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.mainで(JarRsrcLoader.java:58)

これは私の初めてのStackOverflowの質問です。私はあなたの親切な助けを本当に楽しみにしています。 ありがとう!

+0

私はあなたの質問にそれが成功すると、それが失敗したあなたがテストしているのWindows、OS XとLinuxのバージョンを、言っていいことだと思います。 – Tom

+0

さて、ありがとう。私はそれを加えました。 – CrazyEric

+0

違いは、IP:ポートが間違っているか、何もリッスンしていないために、失敗したケースがTCPレベルで接続に失敗していることです。キーストアもトラストストアもSSLSocketもJSSEもJavaも関係ありません。 – EJP

答えて

1

java.net.ConnectException:接続が拒否されましたコネクションは、TCPスタックからのエラーメッセージであり、それが他の側にTCPで接続できなかったことを意味し

を拒否しました。 SSL/TLSがTCPの上の層であり、一度起動のみされているので、TCP接続は、それは問題がSSL/TLS層で異なる行動によって引き起こされていないことを意味成功しました。これは、SSL層が、TCP層によって引き起こされていないことを

もスタックトレースで見ることができます:接続がjava.netで拒否しました。 PlainSocket Impl.socketConnect

もっと可能性の高いTCPコネクション(ファイアウォール)をブロックするものがあるということか、/聞くなどは127.0でリッスンサーバーに到達しようとしている(間違ったIPアドレスに接続しようとしてきたということですLinuxシステムのWindowsでは.0.1)。しかし、現在提供されている情報から正確に何が言えるのかは分かりません。

+0

実際、SSLSocketを通常のSocketに変更すると、システムは正常に動作します。 – CrazyEric

+1

@CrazyEric:スタックトレースによれば、問題はプレーンソケット接続によって引き起こされるので、本当に奇妙です。* java.net.PlainSocketImpl.socketConnect *で接続が拒否されました。つまり、SSL/TLSの処理が完了する前です。私は、あなたが実際に何をしているかを見るためには、[最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)を提供する必要があると思います。 –

+0

ありがとうございました。私はサーバのポートを '80'に変更し、 'sudo'を追加して問題を解決しました。 – CrazyEric

関連する問題