2012-09-05 80 views
1

我有用C#和服務器在JAVA中編寫的客戶端。因此,當我嘗試連接時,服務器javax.net.ssl.SSLHandshakeException: no cipher suites in common和C#「EOF或0字節」中出現錯誤。得到這個錯誤:「javax.net.ssl.SSLHandshakeException:沒有共同的密碼套件」

[C#]:

TcpClient tc = new TcpClient(server, 1337); 


      using (sslStream = new SslStream(tc.GetStream())){ } 

[JAVA]:

SSLServerSocketFactory ssocketFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); 
    SSLServerSocket server = (SSLServerSocket) ssocketFactory.createServerSocket(1337); 
    server.setEnabledCipherSuites(server.getEnabledCipherSuites()); 

和Java啓動性能:

-Djavax.net.ssl.trustStore=Certificatename -Djavax.net.ssl.trustStorePassword=thereisapw -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol -Djavax.net.debug=ssl TCPServer 
+1

server.setEnabledCipherSuites(server.getEnabledCipherSuites())精確地什麼也不做。如果你不知道自己在做什麼,我強烈建議你不要混淆像這樣的SSL參數。 – EJP

回答

2

的信任定義了我們如何去信任的遠程證書那是呈現給你的。密鑰庫用於您擁有的證書(並且您擁有私鑰)。 (關於差異的更多細節here。關於「keystore」的術語可能會令人困惑,因爲它可以有兩個含義)。

在這裏,您嘗試運行服務器,但您尚未設置自己的證書。您需要在密鑰庫中導入/創建證書並將其用作密鑰庫。

如果您未指定密鑰庫,則服務器將無法找到證書/密鑰。因此,它將無法使用默認啓用的任何密碼套件。


我不知道你在哪裏得到這個從,但你並不需要它:-Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol

+0

謝謝,所以我需要在做什麼之前將它加載到窗口的信任庫? – user1649517

+0

不僅需要爲您的服務器創建(或獲取)證書(使用其私鑰),將其放入密鑰庫並將其用作信任庫。然後,您需要導出證書本身(不帶私鑰),並將其導入Windows信任證書存儲區中。 – Bruno

相關問題