SSL 传输参考
使用 ActiveMQ Classic > 配置传输 > ActiveMQ Classic 连接 URI > SSL 传输参考
SSL 传输
SSL 传输允许客户端通过 TCP 套接字上的 SSL 连接到远程 ActiveMQ Classic 代理。
配置语法
ssl://hostname:port?transportOptions
传输选项
来自 TCP 的配置选项是相关的。
示例 URI
ssl://127.0.0.1:61616?trace=false
SSLServerSocket 选项
从版本 5.4 开始,任何 SSLServerSocket 选项都可以通过 ?transport.XXX 设置在 TransportConnection 上,例如
ssl://127.0.0.1:61616?transport.enabledCipherSuites=SSL_RSA_WITH_RC4_128_SHA,SSL_DH_anon_WITH_3DES_EDE_CBC_SHA
ssl://127.0.0.1:61616?transport.needClientAuth=true
客户端配置
JMS 客户端可以使用 ActiveMQSslConnectionFactory 以及 ssl://
代理 URL,以下 Spring 配置说明了这一点
<bean id="AMQJMSConnectionFactory" class="org.apache.activemq.ActiveMQSslConnectionFactory">
<property name="trustStore" value="/path/to/truststore.ts" />
<property name="trustStorePassword" value="password" />
<property name="keyStore" value="/path/to/keystore.ks" />
<property name="keyStorePassword" value="password" />
<property name="brokerURL" value="ssl://127.0.0.1:61616" />
<property name="userName" value="admin" />
<property name="password" value="admin" />
</bean>
除非代理的 SSL 传输配置为 transport.needClientAuth=true,否则客户端不需要密钥库,但需要信任库来验证代理的证书。
类似于代理传输配置,您可以使用 ?socket.XXX 传递 SSL 传输选项,例如
ssl://127.0.0.1:61616?socket.enabledCipherSuites=SSL_RSA_WITH_RC4_128_SHA,SSL_DH_anon_WITH_3DES_EDE_CBC_SHA
主机名验证(从版本 5.15.6 开始)
从版本 5.15.6 开始,ActiveMQ Classic 现在支持 TLS 主机名验证。这已在 ActiveMQ Classic 客户端中默认启用,并在代理上默认禁用。要配置
服务器端主机名验证配置
服务器端的默认值为禁用主机名验证,这可以通过 ?transport.verifyHostName 进行配置。这仅与双向 SSL 相关,并且会导致客户端证书的 CN 与其主机名进行比较以验证它们是否匹配,例如
ssl://127.0.0.1:61616?transport.verifyHostName=true
客户端端主机名验证配置
ActiveMQ Classic 客户端的默认值为启用主机名验证,这可以通过 ?socket.verifyHostName
或简单地通过 ?verifyHostName
(没有前缀)进行配置。这会导致服务器证书的 CN 与服务器主机名进行比较以验证它们是否匹配,例如
ssl://127.0.0.1:61616?socket.verifyHostName=false
或者
ssl://127.0.0.1:61616?verifyHostName=false
其他链接
您还可以通过以下方式打开 SSL 调试信息
-Djavax.net.debug=ssl
这样,您就可以看到哪里出错了,以及为什么连接被关闭。
小心使用组播发现
如果您的 XML 配置文件包含以下内容,并且您希望使用 SSL
<networkConnector uri="multicast://default"/>
那么您目前需要注释掉它。原因是防止 ActiveMQ Classic 尝试连接到自身 - 如果您使用自签名证书执行此操作,您将在控制台中收到大量 certificate_unknown 堆栈跟踪,因为代理没有配置信任库。