Sun Java System Message Queue 3.7 UR1 管理指南

使用签名证书

签名证书可以提供比自签名证书更严密的服务器验证。您只能在客户端与代理之间实现签名证书,而不能在群集中的多个代理之间实现签名证书。除了上面介绍的配置自签名证书的步骤外,使用签名证书还需要其他一些步骤(见下文)。以下各节更详细地介绍了这些步骤。

Procedure使用签名证书

  1. 在密钥库中安装证书。

  2. 配置 Message Queue 客户端,使其在与代理建立基于 SSL 的连接时请求签名证书。

获取和安装签名证书

以下过程说明如何获取和安装签名证书。

Procedure获取签名证书

  1. 使用 J2SE keytool 命令为上一节中生成的自签名证书生成一个证书签名请求 (Certificate Signing Request, CSR)。

    有关 keytool 命令的信息,可以参考

    http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/keytool.html

    下面是一个示例:


    keytool -certreq -keyalg RSA -alias imq -file certreq.csr
            -keystore /etc/imq/keystore -storepass myStorePassword

    这将生成一个 CSR,它将证书封装到指定的文件中(本例中是文件 certreq.csr )。

  2. 使用 CSR 生成或请求签名证书。

    您可以通过以下两种方法之一完成:

    • 由众所周知的证书颁发机构 (Certificate Authority, CA) 签署证书,如 Thawte 或 Verisign。有关如何操作的详细信息,请参见 CA 的文档。

    • 使用 SSL 签名软件包亲自对证书进行签名。

      最终的签名证书是一个 ASCII 字符序列。如果从 CA 收到签名证书,它可能是电子邮件附件或消息文本。

  3. 将签名证书保存到文件中。

    以下说明使用示例名 broker.cer 来表示代理证书。

Procedure安装签名证书

  1. 检查 J2SE 是否默认支持您的证书颁发机构。

    此命令列出系统密钥库中的根 CA:

    keytool -v -list -keystore $JAVA_HOME/lib/security/cacerts
    

    如果您的 CA 已列出,请跳过下一步。

  2. 如果 J2SE 不支持您的证书颁发机构,请将 CA 的根证书导入到 Message Queue 密钥库中。

    下面是一个示例:

    keytool -import -alias ca -file ca.cer -noprompt -trustcacerts
            -keystore /etc/imq/keystore -storepass myStorePassword
    

    其中 ca.cer 是包含从 CA 获取的根证书的文件。

    如果您使用的是 CA 测试证书,则可能需要导入测试 CA 根证书。您的 CA 应提供有关如何获取副本的说明。

  3. 将签名证书导入到密钥库中以替换原来的自签名证书。

    下面是一个示例:

    keytool -import -alias imq -file broker.cer -noprompt -trustcacerts
            -keystore /etc/imq/keystore -storepass myStorePassword
    

    其中 broker.cer 是包含从 CA 收到的签名证书的文件。

    Message Queue 密钥库现在包含一个用于 SSL 连接的签名证书。

配置 Message Queue 客户端运行时环境以请求签名证书

现在,您必须将 Message Queue 客户端运行时环境配置为请求签名证书,并确保客户端信任对该证书进行签名的证书颁发机构。

Procedure要配置客户端运行时环境以请求签名证书

  1. 将连接工厂的 imqSSLIsHostTrusted 属性设置为 false

    默认情况下,客户端用来建立代理连接的连接工厂对象的 imqSSLIsHostTrusted 属性被设置为 true,表示客户端运行时环境将接受提供给它的任何证书。您必须将此值更改为 false,这样客户端运行时环境将尝试验证所有提供给它的证书。 如果证书签署人不在客户端的信任库中,验证将会失败。

  2. 验证签名机构是否已在客户端的信任库中注册。

    要测试客户端是否会接受由您的证书颁发机构签名的证书,请尝试建立 SSL 连接,如上文配置并运行基于 SSL 的客户端中所述。如果 CA 在客户端的信任库中,连接将会成功,您可以跳过下一步。如果连接由于证书验证错误而失败,请执行下一步。

  3. 在客户端的信任库中安装签名 CA 的根证书。

    默认情况下,客户端搜索密钥库文件 cacertsjssecacerts,因此,如果您在两个文件中的任何一个中安装了证书,则无需进行进一步的配置。以下示例将文件 testrootca.cer 中的 Verisign 证书颁发机构的测试根证书安装到默认系统证书文件 cacerts 中。该示例假定 J2SE 安装在 $JAVA_HOME/usr/j2se 目录中:

    keytool -import -keystore /usr/j2se/jre/lib/security/cacerts
            -alias VerisignTestCA -file testrootca.cer -noprompt
            -trustcacerts -storepass myStorePassword
    

    还可以(并建议)将根证书安装到可选系统证书文件 jssecacerts 中:

    keytool -import -keystore /usr/j2se/jre/lib/security/jssecacerts
            -alias VerisignTestCA -file testrootca.cer -noprompt
            -trustcacerts -storepass myStorePassword
    

    第三种可能是将根证书安装到其他密钥库文件中,并配置客户端以使用该文件作为其信任库。以下示例将根证书安装到文件 /home/smith/.keystore 中:

    keytool -import -keystore /home/smith/.keystore
            -alias VerisignTestCA -file testrootca.cer -noprompt
            -trustcacerts -storepass myStorePassword
    

    默认情况下,客户端不搜索此密钥库,因此您必须明确地向客户端提供其位置,将其用作信任库。您可以在客户端运行后,通过设置 Java 系统属性 javax.net.ssl.trustStore 执行此操作:

    javax.net.ssl.trustStore=/home/smith/.keystore