【问题标题】:How i can connect secure to remote websphere server?我如何安全地连接到远程 websphere 服务器?
【发布时间】:2015-01-29 07:56:51
【问题描述】:

我使用 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 上运行的 Web 应用程序,还是某种独立的应用程序?
  • 其他 WebSphere 服务器是否使用自签名证书?
  • @Gas 我的 Web 应用在 GlssFish 3.0 java 应用服务器上运行,具有不同的主机。
  • @NickVasic,是的,只有自签名证书,默认安装 was7。
  • 您遇到的 SSL 异常是什么?您可以在浏览器中使用 https 连接到远程 Web 应用程序吗?

标签: java ssl websphere


【解决方案1】:

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

【讨论】:

  • 不明白,我如何将它集成到 java 代码中。我认为这不适合我的情况。
  • 我建议您阅读 SSL 握手的工作原理。您有一个信任库,您的 AdminClient 使用它来确定是否信任远程证书(在您的情况下为 C:/WAS/AppServer/profiles/AppSrv01/etc/DummyClientTrustFile.jks)。如果您的本地信任库没有安装远程服务器的签名者证书,那么您的 AdminClient 将无法验证或“信任”远程服务器的身份,从而导致 SSL 握手失败。
  • @vicvtor 您没有将它集成到您​​的 Java 代码中。你按照这个答案说的去做。
【解决方案2】:

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

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

那么您应该不再需要设置所有这些javax.net.ssl.* 属性。

【讨论】:

    猜你喜欢
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 2022-08-03
    • 2012-02-20
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多