我如何将安全连接到远程websphere服务器?

时间:2015-01-27 11:25:57

标签: java ssl websphere

我使用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建立安全连接?

2 个答案:

答案 0 :(得分:3)

您需要提取远程签名者证书并将其导入本地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

答案 1 :(得分:1)

我建议不要将它放在您的代码中,而是将WebSphere证书添加到Glassfish受信任的证书中。因此,您需要执行以下步骤:

  • 从WebSphere提取证书 - 最简单的方法是使用浏览器通过https访问在WAS上运行的任何应用程序并将证书保存到文件。
  • 使用keytool将该证书导入Glassfish受信任存储区。它应该是domains / domain1 / config / cacerts.jks(我不是Glassfish专家,因此路径可能不同)。

然后您不再需要设置所有这些javax.net.ssl.*属性。