2014-09-05 136 views
0

我正在使用restlet創建一個具有服務器和客戶端證書的HTTPS通道。我沒有問題證明服務器(即讓服務器公開證書並從客戶端信任它),但我不知道如何發送客戶端證書。 這裏下面的服務器重要的代碼:Restlet發送客戶端證書

Server server = component.getServers().add(Protocol.HTTPS, config.getInt("server.port")); 
     Series<Parameter> parameters = server.getContext().getParameters(); 
     parameters.add("keystorePath", config.getString("keystore.path")); 
     parameters.add("keystorePassword", config.getString("keystore.password")); 
     parameters.add("keyPassword", config.getString("key.password")); 
     parameters.add("keystoreType",config.getString("keystore.type")); 
     /* true */ 
     parameters.add("needClientAuthentication", config.getString("need.client.authentication")); 

和客戶端的配置是這樣的:

if(config.getBoolean("truststore.use")){ 
      Series<Parameter> parameters = client.getContext().getParameters(); 
      parameters.add("truststorePath", config.getString("truststore.path")); 
      parameters.add("truststorePassword", config.getString("truststore.password")); 
      // parameters.add("trustPassword", "password"); 
      parameters.add("truststoreType", config.getString("truststore.type")); 
     parameters.add("keystorePath", config.getString("keystore.path")); 
     parameters.add("keystorePassword", config.getString("keystore.password")); 
     parameters.add("keyPassword", config.getString("key.password")); 
     parameters.add("keystoreType",config.getString("keystore.type")); 

     } 

直到needClientAuthentication是假的一切工作正常。通過將needClientAuthentication設置爲true,它開始失敗,並且由於我沒有發送客戶端證書,因此這是預期的。 異常惜售有followint消息:

Software caused connection abort: recv failed 

,但我不知道,也沒有找到如何發送客戶端證書的任何實例。

我甚至在客戶端添加了密鑰庫信息,並將服務器上的約束放寬到wantClientAuthentication,但沒有證書似乎來自服務器。

+0

您至少需要在客戶端上設置密鑰存儲參數,並且幾乎可以肯定地在服務器上設置信任存儲參數。 – Bruno 2014-09-05 15:56:29

+0

謝謝@布魯諾的建議。我在客戶端添加了keystore信息,放寬costraint想要客戶端身份驗證,但證書似乎不是從客戶端發送的(我對servlet和request.getClientInfo()有一個過濾器getCertificates();返回一個空列表 – 2014-09-05 16:06:41

+0

@Bruno,通過在服務器認證工程上配置信任存儲。不幸的是request.getClientInfo()。getCertificates()仍然是空的,爲什麼? – 2014-09-08 09:51:10

回答

0

我發現了麻煩。顯然服務器不會開始向客戶端請求證書,直到在服務器上配置了信任存儲爲止。通過配置信任庫,相互認證正確發生。