如何为ResteasyClient / HttpClient密钥库指定证书别名?

时间:2018-07-24 20:31:22

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

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

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

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

在任何一个框架中是否都可以指定别名?此客户端密钥库是否仅需要一个证书对?我看不到任何在任何地方指定别名的选项。

1 个答案:

答案 0 :(得分:0)

如果可以使用Apache HttpComponent,可以通过向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"以适合您的需求。