UnboundId 使用来自 Websphere 的 SSL KeyStore
UnboundId use the SSL KeyStore from Websphere
我正在开发一个遗留应用程序,该应用程序始终通过 none SSL 连接使用 UnboundId。我们的基础架构已更改,我需要将其重新设计为 SSL。所以我把代码改成了下面的
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null);
FileInputStream fin1 = new FileInputStream("D:/mycert.cer");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
int i = 0;
Certificate cert = cf.generateCertificate(fin1);
trustStore.setCertificateEntry("cert " + i++, cert);
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustStore.load(null);
tmf.init(trustStore);
TrustManager[] trustManagers = tmf.getTrustManagers();
SSLUtil sslUtil = new SSLUtil(trustManagers);
sslUtil.setDefaultSSLProtocol("TLSv1");
SSLSocketFactory sslServerSocketFactory = sslUtil.createSSLSocketFactory();
LDAPConnection connection = new LDAPConnection(sslServerSocketFactory, server, port, user, password);
此代码有效。然而,我们在 Websphere 上 运行 并且所有证书都位于 Websphere 密钥库中。在这种情况下,我下载了证书并从文件系统或资源中加载它。这不是我们想要的。我们要使用Websphere的keystore。
我在没有手动定义 thrustmanagers 和 keystores 的情况下尝试了这个,但后来到处都是证书链接错误。
有什么方法可以配置 UnboundId 以使用 websphere 密钥库吗?
我们最终不得不采用半清洁解决方案。我们使用 websphere 服务器存储的密钥库文件作为代码的输入。
KeyStore trustStore = KeyStore.getInstance(trustStoreType);
File file = new File(keystoreLocation);
if(file.exists()){
FileInputStream keystoreFile = new FileInputStream(keystoreLocation);
trustStore.load(keystoreFile, keystorePassword.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);
TrustManager[] trustManagers = tmf.getTrustManagers();
SSLUtil sslUtil = new SSLUtil(trustManagers);
sslUtil.setDefaultSSLProtocol(sslProtocol);
SSLSocketFactory sslServerSocketFactory = sslUtil.createSSLSocketFactory();
LDAPConnection connection = new LDAPConnection(sslServerSocketFactory, server, port, user, password);
return connection;
} else {
throw new TechnicalException("Keystore not found");
}
注意 keystoreLocation 这基本上是来自 websphere 的密钥库文件,kesystorePassword.toCharArray() 是该特定密钥库的 websphere 密码。这不是最干净的解决方案,但它让我们重新开始。也许这对以后的其他人有帮助
我正在开发一个遗留应用程序,该应用程序始终通过 none SSL 连接使用 UnboundId。我们的基础架构已更改,我需要将其重新设计为 SSL。所以我把代码改成了下面的
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null);
FileInputStream fin1 = new FileInputStream("D:/mycert.cer");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
int i = 0;
Certificate cert = cf.generateCertificate(fin1);
trustStore.setCertificateEntry("cert " + i++, cert);
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustStore.load(null);
tmf.init(trustStore);
TrustManager[] trustManagers = tmf.getTrustManagers();
SSLUtil sslUtil = new SSLUtil(trustManagers);
sslUtil.setDefaultSSLProtocol("TLSv1");
SSLSocketFactory sslServerSocketFactory = sslUtil.createSSLSocketFactory();
LDAPConnection connection = new LDAPConnection(sslServerSocketFactory, server, port, user, password);
此代码有效。然而,我们在 Websphere 上 运行 并且所有证书都位于 Websphere 密钥库中。在这种情况下,我下载了证书并从文件系统或资源中加载它。这不是我们想要的。我们要使用Websphere的keystore。
我在没有手动定义 thrustmanagers 和 keystores 的情况下尝试了这个,但后来到处都是证书链接错误。
有什么方法可以配置 UnboundId 以使用 websphere 密钥库吗?
我们最终不得不采用半清洁解决方案。我们使用 websphere 服务器存储的密钥库文件作为代码的输入。
KeyStore trustStore = KeyStore.getInstance(trustStoreType);
File file = new File(keystoreLocation);
if(file.exists()){
FileInputStream keystoreFile = new FileInputStream(keystoreLocation);
trustStore.load(keystoreFile, keystorePassword.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);
TrustManager[] trustManagers = tmf.getTrustManagers();
SSLUtil sslUtil = new SSLUtil(trustManagers);
sslUtil.setDefaultSSLProtocol(sslProtocol);
SSLSocketFactory sslServerSocketFactory = sslUtil.createSSLSocketFactory();
LDAPConnection connection = new LDAPConnection(sslServerSocketFactory, server, port, user, password);
return connection;
} else {
throw new TechnicalException("Keystore not found");
}
注意 keystoreLocation 这基本上是来自 websphere 的密钥库文件,kesystorePassword.toCharArray() 是该特定密钥库的 websphere 密码。这不是最干净的解决方案,但它让我们重新开始。也许这对以后的其他人有帮助