有谁可以解释我如何在GlassFish应用服务器中拥有多个X.509证书? 对我来说,主要的挑战是GlassFish只使用一个别名's1as'。
答案 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);
希望这有帮助。