Restlet发送客户端证书

时间:2014-09-05 10:36:42

标签: java ssl restlet restlet-2.0

我正在使用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,但似乎没有证书来自服务器。

1 个答案:

答案 0 :(得分:0)

我发现了麻烦。显然,在服务器上配置信任存储之前,服务器不会开始向客户端请求证书。通过配置信任库,可以正确地进行相互认证。