当前位置: 代码迷 >> Web前端 >> 监控WebSphere 6.1以及WAS6.1生成跟配置安全证书的方法
  详细解决方案

监控WebSphere 6.1以及WAS6.1生成跟配置安全证书的方法

热度:469   发布时间:2013-03-12 11:19:35.0
监控WebSphere 6.1以及WAS6.1生成和配置安全证书的方法

注明:本文转载自网上,原文地址(该地址已经不能访问了):
http://hi.baidu.com/lff0305/blog/item/cb80ac3107ccdca05fdf0e3e.html

?

前提:需要通过JMX访问WebSphere的AdminClient API采集监控数据时,如果WebSphere启用了管理安全性,就不能直接访问,而必须配置安全证书。

?

基本上没什么可说的, 使用SOAP, 需要把ws_runtime.jar放到classpath中. 这个ws_runtime.jar可以搜索一下WAS6.1的安装目录, 有两个, 应该都能用.

Properties adminProps = new Properties();
adminProps.setProperty("type", AdminClient.CONNECTOR_TYPE_SOAP);
adminProps.setProperty("host", "192.168.1.100");
adminProps.setProperty("port", "8880");
adminClient = AdminClientFactory.createAdminClient(adminProps);
ObjectName objName = new ObjectName("WebSphere:name=JVM,process=server1,platform=proxy,node=test-e4dd24fa82Node02,j2eeType=JVM,J2EEServer=server1,version=6.1.0.0,type=JVM,mbeanIdentifier=JVM,cell=test-e4dd24fa82Node02Cell,spec=1.0");
Object value = adminClient.getAttribute(objName, "freeMemory");
System.out.println(value);

?

上面紫色的部分不是能通用的, 需要查询下自己的WAS Server.

?

运行结果:

2009-6-2 17:56:33 com.ibm.websphere.management.AdminClientFactory警告: ADMC0046W
2009-6-2 17:56:33 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-2 17:56:34 com.ibm.ws.ssl.config.SSLConfigManager信息: ssl.disable.url.hostname.verification.CWPKI0027I31406800

?

这个很简单, 但是正常运行的前提是WAS6.1 的安全关掉了 (登录不需要密码, 只需要用户名) 如果安全没有关掉, 及其麻烦, 以后详细写~~需要注意的一点: WAS6.1只支持到JDK/JRE5.0, 所以上面的Java环境应该在JDK/JRE5.0中运行. 在JDK/JRE6.0中运行将报错.


继续前面的. 如果启用了安全(WAS6.1默认的), 会出现下面的错误:

-6-4 10:25:49 com.ibm.websphere.management.AdminClientFactory
警告: ADMC0046W2009-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 disabled2009-6-4 10:25:50 com.ibm.ws.ssl.config.SSLConfigManager
信息: ssl.disable.url.hostname.verification.CWPKI0027Icom.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应用这些KeyStoreTrustStore。

登录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使用它.?点击证书配置项:

?

点击当前节点:

?

然后选择刚刚创建好的KeyStoreTrustStore,?然后点击"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?中的参数.

?

使用证书监控WebSphere示例代码(本人追加的)

Properties adminProps = new Properties();
adminProps.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
adminProps.setProperty(AdminClient.CONNECTOR_HOST, "localhost");
adminProps.setProperty(AdminClient.CONNECTOR_PORT, "8880");
adminProps.setProperty(AdminClient.USERNAME, "chenfeng");
adminProps.setProperty(AdminClient.PASSWORD, "chenfeng");
adminProps.setProperty(AdminClient.CACHE_DISABLED, "false");
// WebSphere服务器是否已启用管理安全性
adminProps.setProperty(AdminClient.CONNECTOR_SECURITY_ENABLED, "true");
adminProps.setProperty(AdminClient.CONNECTOR_AUTO_ACCEPT_SIGNER, "true");
adminProps.setProperty("javax.net.ssl.trustStore","D:/JavaTools/IBM/MyKey/trust.jks");
adminProps.setProperty("javax.net.ssl.keyStore","D:/JavaTools/IBM/MyKey/store.jks");
adminProps.setProperty("javax.net.ssl.trustStorePassword","chenfeng222");
adminProps.setProperty("javax.net.ssl.keyStorePassword", "chenfeng111");
AdminClient adminClient = AdminClientFactory.createAdminClient(adminProps);
// 这里只是最简单了获取了domainName
String domainName = adminClient.getDomainName();

?

?

后记:终于搞定,转载这么一篇文章那叫一个累啊,二十多张图片,下载再上传,还要排版。不过值得!

?