【问题标题】:Restlet sending client certificateRestlet 发送客户端证书
【发布时间】:2014-09-05 10:36:41
【问题描述】:

我正在使用 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 为假,一切正常。通过将 needClientAuthentication 设置为 true 它开始失败,这是预期的,因为我没有发送客户端证书。 引发的异常有以下消息:

Software caused connection abort: recv failed

但我不知道,也没有找到任何关于如何发送客户端证书的示例。

我什至在客户端添加了密钥库信息,并将服务器上的约束放松为wantClientAuthentication,但似乎没有证书来自服务器。

【问题讨论】:

  • 您至少需要在客户端设置密钥库参数,并且几乎可以肯定在服务器上设置信任库参数。
  • 感谢@Bruno 的建议。我在客户端上添加了密钥库信息,将成本限制放宽到 wantClientAuthentication,但证书似乎不是从客户端发送的(我在 servlet 上有一个过滤器,request.getClientInfo().getCertificates(); 返回一个空列表
  • @Bruno,通过 cinfiguring 服务器认证工作上的信任库。不幸的是 request.getClientInfo().getCertificates() 仍然是空的,知道为什么吗?

标签: java ssl restlet restlet-2.0


【解决方案1】:

我发现了问题。显然,在服务器上也配置了信任库之前,服务器不会开始向客户端询问证书。通过配置信任存储,相互认证正确发生。

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 2014-11-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 2014-04-07
    相关资源
    最近更新 更多