outboud连接上的客户端证书

时间:2018-04-05 13:20:13

标签: java ssl jboss jax-rs wildfly

在我的应用程序上,我需要使用客户端身份验证访问一堆REST Web服务。我正在使用RestEasy的JAX-RS客户端实现(实际上是在引擎盖下使用Apache HttpComponents)。

首先我尝试加载 KeyStore

private static KeyStore keyStore;

static {
    try {
        String keyStoreProperty = System.getProperty("javax.net.ssl.keyStore");
        String keyStorePasswordProperty = System.getProperty("javax.net.ssl.keyStorePassword");

        if (keyStoreProperty != null && keyStorePasswordProperty != null) {
            keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            try (InputStream keyStoreData = new FileInputStream(keyStoreProperty)) {
                keyStore.load(keyStoreData, keyStorePasswordProperty.toCharArray());
            }
        }
    } catch (IOException | NoSuchAlgorithmException | CertificateException | KeyStoreException e) {
        //logging
    }
}

接下来,我使用以前加载的 KeyStore 来构建 javax.ws.rs.client.Client

Client client;
if (keyStore != null) {
    client = ClientBuilder.newBuilder()
        .keyStore(keyStore, System.getProperty("javax.net.ssl.keyStorePassword")).build();
} else {
    //logging
}

但是,这段代码似乎不是正确的做事方式。

我想知道是否有可能在JBoss / WildFly上配置keyStore并让它在出站连接上应用它,理想情况是基于URL模式。

1 个答案:

答案 0 :(得分:1)

WildFly没有。

关于配置双向SSL时的代码,还需要配置trustStore。要使客户端信任您正在连接的服务器。或者使用ssl上下文而不是keyStore trustStore对[1]。

[1] https://docs.oracle.com/javaee/7/api/javax/ws/rs/client/ClientBuilder.html