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
,但沒有證書似乎來自服務器。
您至少需要在客戶端上設置密鑰存儲參數,並且幾乎可以肯定地在服務器上設置信任存儲參數。 – Bruno 2014-09-05 15:56:29
謝謝@布魯諾的建議。我在客戶端添加了keystore信息,放寬costraint想要客戶端身份驗證,但證書似乎不是從客戶端發送的(我對servlet和request.getClientInfo()有一個過濾器getCertificates();返回一個空列表 – 2014-09-05 16:06:41
@Bruno,通過在服務器認證工程上配置信任存儲。不幸的是request.getClientInfo()。getCertificates()仍然是空的,爲什麼? – 2014-09-08 09:51:10