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