现在,您必须将 Message Queue 客户端运行时环境配置为请求签名证书,并确保客户端信任对该证书进行签名的证书颁发机构。
将连接工厂的 imqSSLIsHostTrusted 属性设置为 false。
默认情况下,客户端用来建立代理连接的连接工厂对象的 imqSSLIsHostTrusted 属性被设置为 true,表示客户端运行时环境将接受提供给它的任何证书。您必须将此值更改为 false,这样客户端运行时环境将尝试验证所有提供给它的证书。 如果证书签署人不在客户端的信任库中,验证将会失败。
验证签名机构是否已在客户端的信任库中注册。
要测试客户端是否会接受由您的证书颁发机构签名的证书,请尝试建立 SSL 连接,如上文配置并运行基于 SSL 的客户端中所述。如果 CA 在客户端的信任库中,连接将会成功,您可以跳过下一步。如果连接由于证书验证错误而失败,请执行下一步。
在客户端的信任库中安装签名 CA 的根证书。
默认情况下,客户端搜索密钥库文件 cacerts 和 jssecacerts,因此,如果您在两个文件中的任何一个中安装了证书,则无需进行进一步的配置。以下示例将文件 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