如何使用 SSL

社区 > 常见问题解答 > 使用 Apache ActiveMQ Classic > 如何使用 SSL

设置密钥和信任库

有关更多信息,另请参阅 Tomcat 的 SSL 说明。以下内容由 Colin Kilburn 提供。感谢 Colin!

ActiveMQ Classic 默认使用虚拟凭据

ActiveMQ Classic 包含引用虚拟自签名证书的密钥和信任库。当您为您的安装创建代理证书和库时,请覆盖 conf 目录中的值,或删除现有的虚拟密钥和信任库,以避免它们造成干扰。)

  1. 使用 keytool 为代理创建证书
    keytool -genkey -alias broker -keyalg RSA -keystore broker.ks
    
  2. 导出代理的证书,以便与客户端共享
    keytool -export -alias broker -keystore broker.ks -file broker_cert
    
  3. 为客户端创建证书/密钥库
    keytool -genkey -alias client -keyalg RSA -keystore client.ks
    
  4. 为客户端创建信任库,并导入代理的证书。这将建立客户端“信任”代理
    keytool -import -alias broker -keystore client.ts -file broker_cert
    

启动代理

使用 javax.net.ssl.* 系统属性

在启动代理的 VM 之前,设置 ACTIVEMQ_SSL_OPTS 环境变量,以便它知道使用代理密钥库。(请注意,在 ActiveMQ Classic 的先前版本中,此属性在某些脚本中被称为 SSL_OPTS。从 v5.12.0 开始,所有脚本都使用 ACTIVEMQ_SSL_OPTS)

export ACTIVEMQ_SSL_OPTS = -Djavax.net.ssl.keyStore=/path/to/broker.ks -Djavax.net.ssl.keyStorePassword=password

使用 Spring 为代理实例配置 SSL

有时 javax.net.ssl.* 系统属性的使用不合适,因为它们会影响 JVM 中的所有 SSL 用户。ActiveMQ Classic 5.2.x 在中添加了一个元素,允许配置特定于代理的 SSL 属性集。

SslContext 测试用例 验证了使用代理 Xbean 中指定的配置启动 SSL 传输监听器。SslContext 元素按如下方式添加到代理中

SslContext 用于为该代理配置 SslTransportFactory。可以在 模式定义 中或在 org.apache.activemq.spring.SpringSslContext 的访问器中查看可用的配置选项的完整详细信息

启动客户端

启动客户端的 VM 时,请指定以下系统属性

javax.net.ssl.keyStore=/path/to/client.ks
javax.net.ssl.keyStorePassword=password
javax.net.ssl.trustStore=/path/to/client.ts

在 Linux 中,不要使用密钥库的绝对路径。默认情况下,keytool 使用 ~/.keystore,但在某些设置中,将 -Djavax.net.ssl.keyStore=/home/account/.keystore 传递给 Java VM 无法正常工作。这不是 ActiveMQ Classic 特有的问题,但无论如何都要记住这一点。

客户端证书

如果要验证客户端证书,则需要采取一些额外的步骤

  1. 导出客户端的证书,以便与代理共享
    keytool -export -alias client -keystore client.ks -file client_cert
    
  2. 为代理创建信任库,并导入客户端的证书。这将建立代理“信任”客户端
    keytool -import -alias client -keystore broker.ts -file client_cert
    
  3. 添加
    -Djavax.net.ssl.trustStore=/path/to/broker.ts
    

    ACTIVEMQ_SSL_OPTS

  4. 通过在 activemq.xml 中设置以下内容,指示 ActiveMQ Classic 要求进行客户端身份验证

证书吊销

从版本 **5.12** 开始,您可以在 ssl 上下文中定义证书吊销列表 (CRL) 路径,以便可以吊销无效证书

<sslContext>
    <sslContext keyStore="org/apache/activemq/security/broker1.ks"
                keyStorePassword="password"
                trustStore="org/apache/activemq/security/activemq-revoke.jks"
                trustStorePassword="password"
                crlPath="org/apache/activemq/security/activemq-revoke.crl"/>
</sslContext>

此列表是静态的,并在代理启动时加载。

从版本 **5.14.0** 开始,您还可以启用更高级的在线证书状态协议 (OCSP) 协议。为此,您需要通过设置适当的系统属性(在 ${ACTIVEMQ_HOME}/bin/env 中)来配置 java.security 配置扩展的位置,例如

ACTIVEMQ_SSL_OPTS="-Djava.security.properties=$ACTIVEMQ_CONF/java.security"

然后,您需要在 java.security 文件中配置 OCSP 响应程序属性,例如

ocsp.enable=true ocsp.responderURL=<http://ocsp.example.net:80>

可以在 https://github.com/dejanb/sslib 中找到与 OCSP 响应程序一起工作的代理配置的演示

解决 Java 7 SSL 错误

如问题 AMQ-5970 所述,似乎某些版本的 Java 7 存在与需要使用 Diffie-Hellman 密码套件的 SSL 会话相关的问题。如果您遇到此问题,只需将 Bouncy Castle bcprov-jdk15on-148.jar 复制到 ActiveMQ Classic 的 lib 目录并重新启动代理。

这些链接可能也有帮助

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛徽标和 Apache ActiveMQ 项目徽标是 Apache 软件基金会的商标。版权所有 © 2024,Apache 软件基金会。根据 Apache 许可证 2.0 许可。