在GlassFish 2下运行单独的证书

时间:2013-10-06 18:19:18

标签: web-services glassfish open-esb

有谁可以解释我如何在GlassFish应用服务器中拥有多个X.509证书? 对我来说,主要的挑战是GlassFish只使用一个别名's1as'。

1 个答案:

答案 0 :(得分:1)

您可以从外部密钥文件中提取其他证书,以创建SSLContext,然后SSLSocketFactory,您可以将其提供给外部HTTPS呼叫。

E.g:

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);

希望这有帮助。