我如何安全地连接到远程 websphere 服务器?
How i can connect secure to remote websphere server?
我使用 AdminClient 安全连接到本地 websphere 服务器:
java.util.Properties props = new java.util.Properties();
props.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
props.setProperty(AdminClient.CONNECTOR_HOST, "localhost");
props.setProperty(AdminClient.CONNECTOR_PORT, "8880");
props.setProperty(AdminClient.CONNECTOR_SECURITY_ENABLED, "true");
props.setProperty(AdminClient.USERNAME, "admin");
props.setProperty(AdminClient.PASSWORD, "111111");
props.setProperty("javax.net.ssl.trustStore", "C:/WAS/AppServer/profiles/AppSrv01/etc/DummyClientTrustFile.jks");
props.setProperty("javax.net.ssl.keyStore", "C:/WAS/AppServer/profiles/AppSrv01/etc/DummyClientKeyFile.jks");
props.setProperty("javax.net.ssl.trustStorePassword", "WebAS");
props.setProperty("javax.net.ssl.keyStorePassword", "WebAS");
client = AdminClientFactory.createAdminClient(props);
工作完美。但是,如果我尝试安全连接到远程 url(ip 或主机名),则此代码不起作用,例如 SSL exaptions。我认为,证书文件中的问题:
props.setProperty("javax.net.ssl.trustStore", "C:/WAS/AppServer/profiles/AppSrv01/etc/DummyClientTrustFile.jks");
props.setProperty("javax.net.ssl.keyStore", "C:/WAS/AppServer/profiles/AppSrv01/etc/DummyClientKeyFile.jks");
我如何使用 JAVA 从远程服务器检索此证书并与 AdminClient 建立安全连接?
您需要提取远程签署者证书并将其导入本地 WebSphere 信任密钥库。为此,您可以使用 ikeyman 实用程序打开远程密钥库并导出证书,然后使用相同的实用程序将证书导入本地 Websphere 信任库。
SSL 异常应该提供线索,说明您需要从远程服务器提取什么签署者证书并导入本地信任库。
查看 http://www-01.ibm.com/software/webservers/httpservers/doc/v1312/ibm/9atikeyu.htm(导出密钥和导入密钥部分)
此外,类似的问题已经在这里得到解决:
telling java to accept self-signed ssl certificate
我建议不要将它放在您的代码中,而是将 WebSphere 证书添加到 Glassfish 可信证书中。所以你需要执行以下步骤:
- 从 WebSphere 提取证书 - 最简单的方法是使用浏览器通过 https 访问 WAS 上的任何应用程序 运行 并将证书保存到文件。
- 使用 keytool 将该证书导入 Glassfish 受信任的存储区。它应该是 domains/domain1/config/cacerts.jks(我不是 Glassfish 专家,所以路径可能不同)。
那么您应该不再需要设置所有这些 javax.net.ssl.*
属性。
我使用 AdminClient 安全连接到本地 websphere 服务器:
java.util.Properties props = new java.util.Properties();
props.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
props.setProperty(AdminClient.CONNECTOR_HOST, "localhost");
props.setProperty(AdminClient.CONNECTOR_PORT, "8880");
props.setProperty(AdminClient.CONNECTOR_SECURITY_ENABLED, "true");
props.setProperty(AdminClient.USERNAME, "admin");
props.setProperty(AdminClient.PASSWORD, "111111");
props.setProperty("javax.net.ssl.trustStore", "C:/WAS/AppServer/profiles/AppSrv01/etc/DummyClientTrustFile.jks");
props.setProperty("javax.net.ssl.keyStore", "C:/WAS/AppServer/profiles/AppSrv01/etc/DummyClientKeyFile.jks");
props.setProperty("javax.net.ssl.trustStorePassword", "WebAS");
props.setProperty("javax.net.ssl.keyStorePassword", "WebAS");
client = AdminClientFactory.createAdminClient(props);
工作完美。但是,如果我尝试安全连接到远程 url(ip 或主机名),则此代码不起作用,例如 SSL exaptions。我认为,证书文件中的问题:
props.setProperty("javax.net.ssl.trustStore", "C:/WAS/AppServer/profiles/AppSrv01/etc/DummyClientTrustFile.jks");
props.setProperty("javax.net.ssl.keyStore", "C:/WAS/AppServer/profiles/AppSrv01/etc/DummyClientKeyFile.jks");
我如何使用 JAVA 从远程服务器检索此证书并与 AdminClient 建立安全连接?
您需要提取远程签署者证书并将其导入本地 WebSphere 信任密钥库。为此,您可以使用 ikeyman 实用程序打开远程密钥库并导出证书,然后使用相同的实用程序将证书导入本地 Websphere 信任库。
SSL 异常应该提供线索,说明您需要从远程服务器提取什么签署者证书并导入本地信任库。
查看 http://www-01.ibm.com/software/webservers/httpservers/doc/v1312/ibm/9atikeyu.htm(导出密钥和导入密钥部分)
此外,类似的问题已经在这里得到解决:
telling java to accept self-signed ssl certificate
我建议不要将它放在您的代码中,而是将 WebSphere 证书添加到 Glassfish 可信证书中。所以你需要执行以下步骤:
- 从 WebSphere 提取证书 - 最简单的方法是使用浏览器通过 https 访问 WAS 上的任何应用程序 运行 并将证书保存到文件。
- 使用 keytool 将该证书导入 Glassfish 受信任的存储区。它应该是 domains/domain1/config/cacerts.jks(我不是 Glassfish 专家,所以路径可能不同)。
那么您应该不再需要设置所有这些 javax.net.ssl.*
属性。