2013-04-29 178 views
2

我有一個websocket服務器(jetty 9.0.1.v20130408的API),它沒有ssl就可以正常工作。現在我配置我的服務器是這樣的:Jetty - SSL Websocket客戶端

SslContextFactory sslContextFactory = new SslContextFactory(); 
sslContextFactory.setKeyStorePath("/src/main/resources/keystore.jks"); 
sslContextFactory.setKeyStorePassword(password); 
sslContextFactory.setTrustStorePath("/src/main/resources/truststore.jks"); 
sslContextFactory.setTrustStorePassword(password); 
ConnectionFactory sslConnFactory = new SslConnectionFactory(sslContextFactory, "http/1.1); 
connector.addConnectionFactory(sslConnFactory); 
server.addConnector(connector); 

不,我試圖配置客戶端。我想,在客戶端我需要設置路徑到truststore.jks和密碼。但是,然後我得到client.start()異常:SSL沒有一個有效的密鑰庫。當我設置keystore時,然後我得到client.connect java.nio.channels.WritePendingException。這裏是我的客戶代碼:

WebSocketClient client = new WebSocketClient(sslContextFactory); 
URI wssUri = new URI("wss://localhost:"+port); 
sslContextFactory.start(); 
client.start(); 
client.connect(myClientSocket, wssUri); 

任何人都可以幫我嗎?我也嘗試在服務器端設置setWantClientAuth(false)和setTrustall(true),但它也沒有這樣工作;

新增:

我產生我的SSL文件與密鑰工具。

$ keytool -genkeypair -alias certificatekey -keyalg RSA -validity 365 -keystore keystore.jks 
$ keytool -export -alias certificatekey -keystore keystore.jks -rfc -file selfsignedcert.cer 
$ keytool -import -alias certificatekey -file selfsignedcert.cer -keystore truststore.jks 
+0

您是否嘗試使用客戶端證書?或者只是標準的SSL? – 2013-04-29 18:21:21

+0

SSL對我而言是新的。所以我使用keytool生成了像keystore.jks,truststore.jks和certifcate.cert這樣的文件。爲了生成文件,我按照教程:http://www.techbrainwave.com/?p=953。現在我正在爲客戶端和服務器使用相同的文件。 – Salvadora 2013-04-29 18:58:59

+0

我將用於生成文件的keytool命令添加到我的第一篇文章中。 – Salvadora 2013-04-29 19:35:29

回答

1

這是因爲UpgradeRequest發送兩次,據報道here

可以忽略警告現在。發佈時只需使用9.0.4。