【问题标题】:How to specify a certificate alias for a ResteasyClient/HttpClient keystore?如何为 ResteasyClient/HttpClient 密钥库指定证书别名?
【发布时间】:2018-07-24 20:31:21
【问题描述】:

我正在查看 ResteasyClientBuilder 的文档,其中可以为 2 路 SSL 握手/身份验证指定客户端密钥库。

有一种方法keystore() 可以指定密钥库(路径+密钥库密码)以及客户端证书的私钥。但是,如何指定要使用的密钥的别名?

鉴于 ResteasyClient 利用了 HttpClient,我在 Apache 的 SSLSocketFactory 构造函数中看到了同样的问题。

是否有在任一框架中指定别名?此客户端密钥库是否只需要一个证书对?我没有看到任何指定别名的选项。

【问题讨论】:

    标签: java ssl resteasy apache-httpclient-4.x


    【解决方案1】:

    如果您可以使用 Apache HttpComponents,您可以通过将 PrivateKeyStrategy 提供给 SSLContextBuilder 来指定要使用的别名。

    private SSLContext createContext(String keyStorePath, String keyStorePassword, String privateKeyAlias) {
        final char[] password = keyStorePassword.toCharArray();
        // This keyStore could also come from `file.toURI().toURL();`
        final URL keyStore = Application.class.getClassLoader().getResource(keyStorePath);
    
        return SSLContextBuilder.create()
                .loadKeyMaterial(keyStore, password, password, (aliases, socket) -> privateKeyAlias)
                .loadTrustMaterial(keyStore, password)
                .build();
    }
    

    如果您需要使用上下文连接到多个端点,您可以更改函数(alias, socket) -> "aliasToUse" 以满足您的需求。

    【讨论】:

      猜你喜欢
      • 2011-08-09
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      相关资源
      最近更新 更多