2014-09-05 98 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

我发现了麻烦。显然服务器不会开始向客户端请求证书,直到在服务器上配置了信任存储为止。通过配置信任库,相互认证正确发生。