在我的应用程序上,我需要使用客户端身份验证访问一堆 REST Web 服务。我正在使用 RestEasy 的 JAX-RS 客户端实现(实际上在后台使用 Apache HttpComponents(。
首先,我尝试加载密钥库:
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
}
}
接下来,我使用先前加载的密钥库来构建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 上配置密钥库,并让它将其应用于出站连接,理想情况下基于 URL 模式。
WildFly 没有这个。
关于配置2路SSL时的代码,您还需要配置信任存储。要使客户端信任您正在连接的服务器。或者使用 ssl 上下文而不是密钥存储信任存储对 [1]。
[1] https://docs.oracle.com/javaee/7/api/javax/ws/rs/client/ClientBuilder.html