系统无法创建 SOAP 连接器以连接到端口 8880 (SSL) 安全

来源:互联网 发布:word数据合计 编辑:程序博客网 时间:2024/05/13 11:23
使用JMX获得WebSphere6.1的信息(2)
2009-06-04 10:27
http://wenku.baidu.com/view/3f9cdfbec77da26925c5b058.html
继续前面的. 如果启用了安全(WAS6.1默认的), 会出现下面的错误:

2009-6-4 10:25:49 com.ibm.websphere.management.AdminClientFactory
警告: ADMC0046W
2009-6-4 10:25:50 com.ibm.ws.management.connector.interop.JMXClassLoader
警告: Could not find tmx4jTransform.jar in null/etc/tmx4jTransform.jar - Interoperability to older versions of WebSphere is disabled
2009-6-4 10:25:50 com.ibm.ws.ssl.config.SSLConfigManager
信息: ssl.disable.url.hostname.verification.CWPKI0027I
com.ibm.websphere.management.exception.ConnectorException: ADMC0016E: 系统无法创建 SOAP 连接器以连接到端口 8880 上的主机 192.168.1.100。

等等等等


如何判断安全已经启用了? 比较简单 , 如果WAS6.1 要求输入用户名和密码, 同时浏览器中查看控制台的协议是HTTPS, 那么就说明安全启用了 (默认的应该是启用的)





下面的步骤比较麻烦, 是WAS6.1特殊的. 因为需要WAS6.1的证书. 在WAS6.0里面, 这个步骤很简单, 默认的证书能直接用, 但是WAS6.1就不行, 默认的证书不能用, 必须生成自己的证书并配置到WAS6.1里面.

首先, 进入 <WAS_HOME>AppServer/bin, 运行ikeyman.bat文件, 进入证书配置工具:



点击添加:


选择类型JKS, 首先生成KeyStore. 目录设定为c:\test , 名称是store.jks



点击 OK , 之后会询问密码: 这里要输入KeyStre的密码: (密码要记住! 后面会用到)


点击OK, 返回主界面. 下面列表中很多默认的证书, 没有用, Ctrl-A 全选, 然后点击右侧的DELETE, 都删掉:



删掉后, 创建自签署证书:


在弹出的界面中, 输入必填的信息. 基本上都是证书的标识, 可以填入自己的一些信息:

点击OK. 这时KeyStore就创建完毕了. 这里需要把它导出, 稍后创建TrustStore用:



点击右下角的Extract Certificate... , 导出证书. 这里命名为cert.arm, 放到c:\test下面:


OK, 此时KeyStore就生成完毕了. 下面生成TrustStore. 再次点击New: (这次用的文件名是trust.jks , 同样放到了c:\test下面, 同样要记住TrustStore的密码)




同样, 把下面没有用的证书删掉. 然后点击 Add:



在弹出的界面中选择刚刚导出的cert.arm文件:


这时会询问Label. 随便填点文本:



点击OK, TrustStore生成完毕了. 

这时 , 查看c:\test 文件夹, 里面应该有三个文件 : store.jks (KeyStore), cert.arm (导出文件), trust.jks (TrustStore文件)

下面的工作就是让WAS6.1应用这些KeyStore和TrustStore.

登录WAS6.1控制台, 点击 Security - SSL certificate and key management - Key stores and certificates 选项:


点击 new :


在界面中输入KeyStore的名称(这里用testKeyStore), Path(刚刚创建的, c:\test\store.jks), 密码 (创建的时候使用的密码, 这里用到了!!) 类型选择JKS:




一样的步骤, 加入TrustStore.jks:



这样, 自己生成的证书就导入到WAS中了. 下面要让WAS使用它. 点击证书配置项:

点击当前节点:


然后选择刚刚创建好的KeyStore和TrustStore, 然后点击"Get Certificate Alias", 获得别名.


之后, 点击OK 保存更改. 这时, WAS6.1的配置就完毕了. 重启WAS , 再重新登录控制台, 就可以在浏览器的证书信息中查看到刚才使用ikeyman生成证书时输入的一些信息了. 如果使用Firefox等浏览器, 可能还需要加入一个Exception, 因为这个证书是我们自己生成的, 不是Firefox认为"安全的"机构生成的, 所以会报告安全警告. 当Firefox询问的时候加入Exception, 忽略它就行了.

下面就是Java程序了. 把test文件夹拷贝到Java程序运行的机器上, 这里有两种方法.

第一种, 修改程序:

在创建adminClient前面加入下面的代码, 定义Keystore 和 TrustStore. 注意程序里面用到了上面生成KeyStore/TrustStore的口令!

            adminProps.setProperty(AdminClient.USERNAME, "websphere");
            adminProps.setProperty(AdminClient.PASSWORD, "websphere");
            adminProps.setProperty(AdminClient.CONNECTOR_SECURITY_ENABLED, "true");
            adminProps.setProperty("javax.net.ssl.trustStore", "c:/test/trust.jks");
            adminProps.setProperty("javax.net.ssl.keyStore", "c:/test/store.jks");
            adminProps.setProperty("javax.net.ssl.trustStorePassword", "password for keystore");
            adminProps.setProperty("javax.net.ssl.keyStorePassword", "password for truststore");    


然后在文档(1) 中的程序就能正常运行了.

第二种, 导入生成的KeyStore.jks 到 Java程序运行的JRE中 , 就不用运行的时候指定了: 目标密匙口令, 即JDK/JRE中默认的, 如果没改过就是changeit; 源密匙口令即上面生成KeyStore的口令 (又一次用到了)



之后, 上面代码里面的青色的部分就可以忽略了. 注意运行Java程序的JRE/JDK, 应该指定为上面命令行导入目标的JDK/JRE, 即 -destkeystore 中的参数.