0

谁能解释一下我的 GlassFish 应用程序服务器中如何拥有多个 X.509 证书?对我来说主要的挑战是 GlassFish 只使用一个别名,即“s1as”。

4

1 回答 1

1

您可以从外部密钥文件中提取其他证书以创建一个SSLContext然后SSLSocketFactory,您可以将其输入到您的外部 HTTPS 调用中。

例如:

KeyStore cKeyStore = KeyStore.getInstance("PKCS12");
try (InputStream clientCertKeyInput = new FileInputStream("my.pfx")) {
     cKeyStore.load(clientCertKeyInput, "password".toCharArray());
}
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(cKeyStore, "password".toCharArray());

SSLContext sslCtx = SSLContext.getInstance("TLS");
sslCtx.init(keyManagerFactory.getKeyManagers(), 
            null, // default javax.net.ssl.trustStore
            new SecureRandom()); 

SSLSocketFactory sslSocketFactory = sslCtx.getSocketFactory();

然后你可以HttpsURLConnection用它配置一个:

httpsConn.setSSLSocketFactory(sslSocketFactory);

或者,如果您使用 JAXWS 将其设置为BindingProvider' 上下文的属性:

Map<String, Object> ctxt = ((BindingProvider) port).getRequestContext();
ctxt.put(JAXWSProperties.SSL_SOCKET_FACTORY, sslSocketFactory);

希望这可以帮助。

于 2013-10-10T21:27:58.223 回答