我正在使用restlet创建一个具有服务器和客户端认证的HTTPS通道。我没有问题证明服务器(即让服务器公开证书并从客户端信任它),但我不知道如何发送客户端证书。 下面是服务器重要代码:
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为false,一切正常。通过将needClientAuthentication设置为true,它开始失败,并且由于我没有发送客户端证书,所以它是预期的。 异常上升有以下消息:
Software caused connection abort: recv failed
但我不知道,也没有找到有关如何发送客户端证书的任何示例。
我甚至在客户端上添加了密钥库信息,并将服务器上的约束放宽到wantClientAuthentication
,但似乎没有证书来自服务器。
答案 0 :(得分:0)
我发现了麻烦。显然,在服务器上配置信任存储之前,服务器不会开始向客户端请求证书。通过配置信任库,可以正确地进行相互认证。