在 WebSphere Message Broker 中设置 SSL 配置

本文将向您展示如何在 AIX 之上的 WebSphere Message Broker 中设置 SSL 通信。本文提供了一个重要因素的示例,该因素在 SSL 故障排除和问题确认期间被认为是一个重要因素。

Gautam K. Bhat, 全球集成架构师, IBM

Gautam K. Bhat 于 2007 年加入 IBM,是一名 IBM 认证的 IT 专家和消息传递、集成和中间件方面的全球问题专家。他在印度的 Middleware Center of Excellence (CoE) for IBM Global Technology Services 负责培训和辅导,以实现策略外包。Gautam 还是一名面向美洲客户的全球集成架构师。他荣获的专业证书包括 Sun Certified Business Component Developer、Sun Certified Java Programmer、Sun Certified Web Component Developer、Service Oriented Architecture Associate WebSphere Message Broker Administrator 和 WebSphere MQ Administrator。



2012 年 7 月 16 日

免费下载:IBM® WebSphere® Message Broker 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

简介

在许多环境中,安全套接层 (SSL) 配置 往往充满挑战,因为配置和设置中涉及到许多组件。IBM® WebSphere® MQ 中的 SSL 配置和用途完全不同于 WebSphere Message Broker 中的 SSL 用途,包括术语方面的不同。实现 WebSphere Message Broker SSL 需要对面向开发人员的 WebSphere Message Broker 节点有很好的理解,还需要对面向基础架构 支持团队的 WebSphere Message Broker Infrastructure 有很好的理解。

对于 Web 服务中介和 Web 服务定义语言 (Web Services Definition Language, WSDL) 定义的转换而言,WebSphere Message Broker 是一个便利的中间点。消息流既可以是请求提供某项 Web 服务的请求者,也可以是其 Web 服务客户端被调用的服务提供者。最常用于此目的的节点是 HTTPInput 节点、HTTPReply 节点、HTTPRequest 节点和相应的 HTTPS 节点。

本文将向您展示如何在 WebSphere Message Broker 上实现 SSL 并配置 HTTP,从而使用 SSL (HTTPS) 通信。

术语

证书机构 (CA)
一个发出数字证书的受信任第三方。数字证书通过证书的指定主体证明了 公钥的所有权。
证书签名请求 (CSR)
一条由申请人发送给证书机构的消息,用于请求获得一个数字身份证书。
密钥库
一个存储库,存储了用于 SSL 加密中的实例的密钥条目和安全证书。
WebSphere Message Broker 中的节点
这些节点是您可以用来定义和创建消息流的一些实体。所有这些节点均可在 WebSphere Message Broker 中使用,以下节点可与 SSL 一起使用:HTTPInput、HTTPReply、HTTPRequest、SOAPInput、SOAPReply、SOAPRequest 和 SOAPAsyncRequest。
Truststore
如果某个密钥库用于包含受信任的证书,那么它就是一个 Truststore。

Truststore 目录结构

Java 密钥库 (JKS) 格式的 Truststore cacert 存储在 AIX 上的以下默认位置:

  • WebSphere Message Broker V6:/opt/IBM/mqsi/610/jre15/ppc64/lib/security
  • WebSphere Message Broker V7:/opt/IBM/mqsi/7.0/jre16/lib/security

只要在代理注册表中指定了密钥库文件(如下所示) ,就可以在任意位置存储它。

SSL 配置步骤

和在 WebSphere MQ 一样,WebSphere Message Broker 中的 SSL 配置需要一个密钥存储库,即一个密钥库。SSL 用于加强 WebSphere Message Broker 基础架构的安全。以下是一些高级的 SSL 配置步骤:

  1. 生成一个密钥库: 创建密钥库文件的方法有许多种,比如使用 gsk7cmd/gsk6cmd,它是叫做 ikeyman 的全球安全工具包 (GSK) 图形工具的一部分。本文使用了一个叫做 keytool 的命令行工具。
  2. 为现有的密钥库生成一个证书签名请求 (CSR)。
  3. 将一个 root 或中间证书机构 (CA) 证书导入现有密钥库。
  4. 将一个已签署的证书导入现有密钥库。
  5. 验证证书的细节信息,包括以下内容:
    • 列出所有证书。
    • 列出某个特定证书。
    • 列出受信任的 CA 证书。

1. 生成一个密钥库

keytool -genkey -alias <broker name> -keystore <broker name>.jks -keysize 2048

keytool 命令将出现在代理服务 id 的路径中。在这里,<broker name> 表示运行在您的服务器之上的代理实例;可以使用代理名称作为别名,以便在每个代理的单独的条目之间进行区分。

作为最佳实践,密钥库文件的名称 (keystore.jks) 应该将 <broker name> 名称包含在内,比如 <broker name>.jks。 为了简便起见,我们将使用 BROKER1 作为代理的名称。上述命令生成了私钥和密钥库文件。在输入上述命令之后,系统会提示您回答以下问题:

What is your first and last name?
    [Unknown]:  
What is the name of your organizational unit?
    [Unknown]:  
What is the name of your organization?
    [Unknown]:  
What is the name of your City or Locality?
    [Unknown]:  
What is the name of your State or Province?
    [Unknown]:  
What is the two-letter country code for this unit?
    [Unknown]:

在提供上述问题的答案之后,系统会提示您确认所有回答是否正确,如下所示。如果所有回答都是正确的,请输入 Yes

Is CN=, OU=, O=, L=, ST=, C= correct? (type "yes" or "no")
    [no]:  yes

Enter key password for <alias name>:
    (RETURN if same as keystore password):

一个样例条目如下所示:

What is your first and last name?
    [Unknown]:  BROKER1
What is the name of your organizational unit?
    [Unknown]:  ZONE1
What is the name of your organization?
    [Unknown]:  IBM
What is the name of your City or Locality?
    [Unknown]:  US
What is the name of your State or Province?
    [Unknown]:  Washington
What is the two-letter country code for this unit?
    [Unknown]:  US
Is CN=BROKER1, OU=ZONE1, O=IBM, L=US, ST=Washington, C=US correct? (type "yes" or "no")
    [no]:  yes
Enter key password for <bonca60>:
    (RETURN if same as keystore password):  ********
$

2. 为现有的密钥库生成一个证书签名请求 (CSR)

keytool -certreq -alias BROKER1 -keystore BROKER1.jks -file BROKER1.csr

在这里,您要创建一个私钥。将 CSR 文件发送给 CA 团队,以便获得生成的证书。将 CRS 传递给 CA 的过程取决于 CA,传输 证书详细信息的最常见方法是通过网络链接。在收到来自 CA 的已签名证书(下方将其命名为 certificate.der)之后,继续以下步骤:

3. 将一个 root 或中间证书机构 (CA) 证书导入现有密钥库

keytool -import -trustcacerts -alias root -file Thawte.crt -keystore BROKER1.jks

密钥库文件的名称为 BROKER1.jks,中间 CA 证书的名称为 Thawte.crt。

您必须在导入已签名的证书之前导入 root 和/或中间 CA 证书,因为证书是按序生效的。root 证书必须 出现在密钥文件中,这样已签名的证书才有一个发挥其效用的平台。最常使用的 CA 是 GlobalSignVeriSign

4. 将一个已签署的证书导入现有密钥库

keytool -import -trustcacerts -alias BROKER1 -file certificate.der -keystore BROKER1.jks

此证书是您从上述 CA 中接收的证书。已签名证书文件的名称为 certificate.der。

5. 验证证书的细节信息

为了确保已正确执行上述步骤,进行以下确认和验证检查非常重要:

列出密钥库中的所有可用证书

keytool -list -keystore BROKER1.jks

/home/brkr>keytool -list -keystore BROKER1.jks
IBMJSSEProvider2 Build-Level: -20100325
Enter keystore password:

Keystore type: jks
Keystore provider: IBMJCE

Your keystore contains 11 entries

verisign class 1 public primary certification authority - g3, 
    Sep 14, 2011, trustedCertEntry,
Certificate fingerprint (MD5): B1:47:BC:18:57:D1:18:A0:78:2D:EC:71:E8:2A:95:73
verisign class 1 public primary certification authority - g2, 
    Sep 14, 2011, trustedCertEntry,
Certificate fingerprint (MD5): DB:23:3D:F9:69:FA:4B:B9:95:80:44:73:5E:7D:41:83
verisign class 4 public primary certification authority - g3, 
    Sep 14, 2011, trustedCertEntry,
Certificate fingerprint (MD5): DB:C8:F2:27:2E:B1:EA:6A:29:23:5D:FE:56:3E:33:DF
verisign class 4 public primary certification authority - g2, 
    Sep 14, 2011, trustedCertEntry,
Certificate fingerprint (MD5): 26:6D:2C:19:98:B6:70:68:38:50:54:19:EC:90:34:60
verisign class 2 public primary certification authority, 
    Sep 14, 2011, trustedCertEntry,
Certificate fingerprint (MD5): B3:9C:25:B1:C3:2E:32:53:80:15:30:9D:4D:02:77:3E
entrust.net global client certification authority, 
    Sep 14, 2011, trustedCertEntry,
Certificate fingerprint (MD5): 9A:77:19:18:ED:96:CF:DF:1B:B7:0E:F5:8D:B9:88:2E
thawte_dv_ssl_ca_3, Oct 14, 2011, trustedCertEntry,
Certificate fingerprint (MD5): A5:97:C7:3F:D2:0D:F6:0C:10:D5:4D:31:49:D6:CA:9D
verisign class 2 public primary certification authority - g3, 
    Sep 14, 2011, trustedCertEntry,
Certificate fingerprint (MD5): F8:BE:C4:63:22:C9:A8:46:74:8B:B8:1D:1E:4A:2B:F6
verisign class 2 public primary certification authority - g2, 
    Sep 14, 2011, trustedCertEntry,
Certificate fingerprint (MD5): 2D:BB:E5:25:D3:D1:65:82:3A:B7:0E:FA:E6:EB:E2:E1
verisign class 3 secure server ca, Sep 14, 2011, trustedCertEntry,
Certificate fingerprint (MD5): 2A:C8:48:C0:85:F3:27:DE:32:29:44:BB:B0:2C:79:F8
verisign class 3 public primary certification authority, 
    Sep 14, 2011, trustedCertEntry,
Certificate fingerprint (MD5): 10:FC:63:5D:F6:26:3E:0D:F3:25:BE:5F:79:CD:67:67

列出某个特定的证书

keytool -list –v –keystore BROKER1.jks –alias <alias name>
/home/brkr>keytool -list -v -keystore BROKER1.jks -alias broker1
IBMJSSEProvider2 Build-Level: -20100325
Enter keystore password:
Alias name: broker1
Creation date: Sep 14, 2011
Entry type: keyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=xxxx.xxx.xxxxxxxx.com, OU=Zone1, O=IBM, L=India, ST=Chennai, C=IN
Issuer: CN=M-PKI-TER-CA, O=IBM, C=IN
Serial number: 13fd3b
Valid from: 9/8/11 1:51 PM until: 10/12/12 1:51 PM
Certificate fingerprints:
    MD5:  21:6B:F8:B8:31:3B:CA:5A:6D:92:86:80:B6:24:70:C1
    SHA1: DC:88:DA:49:72:4E:53:F5:74:6D:7C:82:A8:18:7C:7F:A3:E1:FA:BD

列出受信任的 CA 证书

此命令显示了 CA 机构证书的详细信息:

keytool -list –v -keystore /opt/IBM/mqsi/7.0/jre16/lib/security/cacerts

配置 Message Broker,以便为 HTTP/HTTPS 请求提供服务

在 WebSphere Message Broker 中,HTTPInput、HTTPReply、HTTPRequest、SOAPInput、SOAPReply、SOAPRequest 和 SOAPAsyncRequest 节点用于促进发往 Web 服务和来自 Web 服务的 HTTP/HTTS 请求的顺利完成。关于这些节点的更多信息,请参阅 WebSphere Message Broker 信息中心内的 内置节点

作为代理基础架构变更的一部分,您必须告诉代理去哪儿查找密钥库和 truststore 文件:

1. 列出代理注册表

mqsireportproperties BROKER1 -o BrokerRegistry -r
BrokerRegistry
    uuid='BrokerRegistry'
    brokerKeystoreType='JKS'
    brokerKeystoreFile=' /home/brkr/BROKER1.jks’
    brokerKeystorePass='brokerKeystore::password'
    brokerTruststoreType='JKS'
    brokerTruststoreFile=' /opt/IBM/mqsi/7.0/jre16/lib/security/cacerts'
    brokerTruststorePass='brokerTruststore::password'
    httpConnectorPortRange=''
    httpsConnectorPortRange=''
    modeExtensions=''
    operationMode='enterprise'
    shortDesc=''
    longDesc=''
BIP8071I: Successful command completion.

有关更多信息,请参阅 WebSphere Message Broker 信息中心内的 mqsireportproperties 命令

2. 将 root 证书和服务器证书导入代理 truststore

转至 CODE/opt/IBM/mqsi/7.0/jre16/lib/security 并继续以下步骤:

keytool -import -trustcacerts –alias root.Cert -file /home/brkr/ Thawte.crt 
   -keypass <password> -keystore cacerts –storepass changeit

keytool -import -alias BROKER1 -file /home/brkr/certificate.der 
   -keystore cacerts –storepass changeit

trustore (cacerts) 的默认密码为 XXXXX

3. 在代理实例上启用 SSL

该命令对 HTTP 侦听器对象启用了 SSL:

mqsichangeproperties BROKER1 -b httplistener -o HTTPListener -n enableSSLConnector -v true

4. 将代理属性修改为指向密钥库文件

密钥库文件是在上面的 步骤 1. 生成一个密钥库 中生成的。

mqsichangeproperties BROKER1 -b httplistener -o HTTPSConnector -n keystoreFile 
    -v /home/brkr/BROKER1.jks

5. 向代理注册表添加代理密钥库文件

mqsichangeproperties BROKER1 -o BrokerRegistry -n brokerKeystoreFile 
    -v /home/brkr/BROKER1.jks

6. 向代理注册表添加代理 truststore 文件

mqsichangeproperties BROKER1 -o BrokerRegistry -n brokerTruststoreFile 
     -v /opt/IBM/mqsi/7.0/jre16/lib/security/cacerts

7. 为密钥库设置存储库密码

mqsisetdbparms BROKER1 -n brokerTruststore::password -u temp -p changeit

8. 建立代理与密钥库密码的关联

mqsichangeproperties BROKER1 -b httplistener -o HTTPSConnector -n keystorePass 
    -v <password>

9. 关联某个代理端口,以便为 HTTPS 请求提供服务

mqsichangeproperties BROKER1 -b httplistener -o HTTPSConnector -n port -v 7094

现在 BROKER1 会运行在端口 7094 之上,以便处理 HTTPS 请求。处理 HTTPS 请求的默认端口为 7083。

10. 关联某个代理端口,以便为 HTTP 请求提供服务

mqsichangeproperties BROKER1 -b httplistener -o HTTPConnector -n port -v 7091

现在 BROKER1 会运行在端口 7091 之上,以便处理 HTTP 请求。处理 HTTP 请求的默认端口为 7080。

11. 更改 JVM 属性

通过修改对象 ComIbmJVMManager,您 可以根据您的需要更改 JVM 堆大小:

mqsichangeproperties BROKER1 -o ComIbmJVMManager -n jvmMaxHeapSize -v 1048576000
mqsichangeproperties BROKER1 -o ComIbmJVMManager -n jvmMinHeapSize -v 134217728

12. 验证代理属性

mqsireportproperties BROKER1 -b httplistener -o HTTPConnector -n port
7091
BIP8071I: Successful command completion.

mqsireportproperties BROKER1 -b httplistener -o HTTPSConnector -n port
7094
BIP8071I: Successful command completion.

13. 重新启动代理

mqsistop <Broker Name>
mqsistart <Broker Name>
mqsistop BROKER1
mqsistart BROKER1

设置专用于执行组的端口

为了给 SOAP 请求提供服务,需要在执行组 (EG) 级别上配置端口。每个执行组都有一个侦听器、一个 HTTP 端口和一个 HTTPS 端口。默认 SOAP 节点的端口号为 7800(适用于 HTTP)和 7843(适用于 HTTPS)。在下面的示例中,<EG Name> 代表执行组的名称。

1. 配置 SSL 协议

首先告诉 EG 正在使用哪种 SSL 协议。SSLv3 是默认 的 SSL 协议。

mqsichangeproperties BROKER1 -e <EG Name> -o HTTPSConnector -n sslProtocol -v SSLv3

2. 为 SOAP over HTTP 请求配置端口

明确为 SOAP over HTTP 请求配置端口。

mqsichangeproperties BROKER1 –e <EG Name> -o HTTPSConnector 
    -n explicitlySetPortNumber -v 7963

3. 建立密钥库文件与代理 EG 的关联

前面创建的密钥库文件需要与代理实例建立关联,以便了解其存储库文件。为了避免混淆,不要在服务器上使用多个密钥库文件。

mqsichangeproperties BROKER1 -e <EG Name> -o HTTPSConnector 
    -n keystoreFile -v /home/brkr/BROKER1.jks

4. 关联密钥库类型。

您应该在代理上配置密钥库类型,因为代理还支持其他几种密钥库类型。关于这些类型的信息已超出了本书的讨论范围,本文使用了一个 Java 密钥库 (JKS)。

mqsichangeproperties BROKER1 -e <EG Name> -o HTTPSConnector -n keystoreType -v JKS

5. 关联密钥库密码

建立密钥库密码与代理的关联,这样就可以将它保存在其存储库中,将它用于身份验证之目的,在查询新的请求时会要求进行身份验证:

mqsichangeproperties BROKER1 -e <EG Name> -o HTTPSConnector -n keystorePass -v <password>

为执行组设置 JVM 属性

在 WebSphere Message Broker 中启动一个执行组时,会创建一个 JVM,该 JVM 主要由 IBM 原始节点使用,用来发挥 Java 功能。可以通过将参数传递给 DataFlowEngine JVM 来直接配置 JVM,也可以通过代理配置它。在以任何方式使用代理 JVM 时,DataFlowEngine 内存 会继续扩大,并且可能导致资源问题。可以使用以下几个命令设置您的最小和最大 JVM 堆大小:

mqsichangeproperties BROKER1 -e <EG Name> -o ComIbmJVMManager -n keystoreFile 
    -v /home/brkr/BROKER1.jks
mqsichangeproperties BROKER1 -e <EG Name> -o ComIbmJVMManager -n keystoreType 
    -v JKS
mqsichangeproperties BROKER1 -e <EG Name> -o ComIbmJVMManager -n keystorePass 
    -v brokerKeystore::password
mqsichangeproperties BROKER1 -e <EG Name> -o ComIbmJVMManager -n truststoreFile 
    -v /home/brkr/BROKER1.jks

在此命令中,密钥库文件的类型与 ComIbmJVMManager 对象有关联。

mqsichangeproperties BROKER1 -e <EG Name> -o ComIbmJVMManager -n truststoreType -v JKS

在查询新请求时,会将密钥库密码与代理的 ComIbmJVMManager 对象相关联,这样就可以将它保存在其存储库中,将它用于身份验证之目的:

mqsichangeproperties BROKER1 -e <EG Name> -o ComIbmJVMManager -n truststorePass 
    -v brokerTruststore::password

问题场景

在此场景中,CA 提供的已签名证书是不正确的。这种情况解决起来有点棘手,但您可以使用上述命令密切关注其输出。

我们更新了代理证书,并能够在同一台服务器上显示证书的细节信息(带有正确的开始日期和终结日期)。为了再次确认这些信息,我们 会尝试在相应的 Message Broker 服务器上使用 URL https://<hostname of UNIX server:><port>,该 URL 正确显示了带有开始日期和终结日期的更新后的证书。但应用程序无法连接到 Message Broker 并收到证书验证错误。通常,会导入 .der 格式的证书作为证书更新的一部分。我们确定 .der 证书并没有包含链式证书,因为 CA 团队没有提供它们。这使我们开始思考链式证书是否被遗漏了?我们显示了完整的证书列表并比较了环境。那些链式证书是什么呢?它们是识别 CA 的证书。

/var/mqsi/ssl/BROKER1>keytool -list -v -alias broker1 -keystore BROKER1.jks 
    -storepass <password>
Alias name: broker1
Creation date: Dec 9, 2011
Entry type: keyEntry
Certificate chain length: 3
Certificate[1]:
Owner: CN=servername, OU=ZONE1, O=IBM, L=CN, C=IN
Issuer: CN=IBM_PKI_SubCA2, O=IBM, C=IN
Serial number: 3142a
Valid from: 11/7/11 8:43 AM until: 12/11/12 8:43 AM
Certificate fingerprints:
    MD5:  93:7F:6D:07:72:AA:47:0D:0A:BB:1C:9D:1B:3F:68:F8
    SHA1: D2:7E:1B:99:46:DB:88:24:4E:AE:35:B1:DF:D6:40:58:20:91:D1:18
Certificate[2]:
Owner: CN=IBM_PKI_SubCA2, O=IBM, C=IN
Issuer: CN=IBM_PKI_CA, O=IBM, C=IN
Serial number: 2
Valid from: 5/14/03 4:04 AM until: 5/14/13 4:04 AM
Certificate fingerprints:
    MD5:  BE:F7:0A:42:D7:C7:A8:40:B6:31:B1:93:E1:1B:6D:D6
    SHA1: 77:E1:05:21:74:3E:65:6A:11:DB:3D:BD:D2:34:99:7F:45:93:F8:5A
Certificate[3]:
Owner: CN=IBM_PKI_CA, O=IBM, C=IN
Issuer: CN=IBM_PKI_CA, O=IBM, C=IN
Serial number: 0
Valid from: 5/31/02 3:34 AM until: 5/31/32 3:34 AM
Certificate fingerprints:
    MD5:  8E:E6:5E:54:97:0E:DA:E9:12:65:7C:E1:C3:8A:5B:C6
    SHA1: B4:C2:C5:17:91:3D:2F:32:10:AB:2D:5A:99:5A:08:5C:10:4F:3E:2B

结束语

本文描述了在 WebSphere Message Broker V6 和 V7 中实现 SSL 通信的标准机制。还描述了客户环境中由于 CA 提供的证书不正确而导致的常见问题。

致谢

作者非常感谢以下人员提供的包括意见和反馈:

  • Hermann Huebler:解决方案专家和 SME, Application Integration and Middleware, IBM India
  • Muthukumar Manoharan:支持专家,WebSphere MQ and WebSphere Message Broker Support, IBM India
  • Vivek Grover:团队领导,WebSphere Message Broker and WebSphere Business Events Level-2 Support, IBM US

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=825931
ArticleTitle=在 WebSphere Message Broker 中设置 SSL 配置
publish-date=07162012