第 5 章 保护代理
5.1. 安全连接
当代理连接到消息传递客户端或代理连接到其他代理时,您可以使用传输层安全(TLS)来保护这些连接。
您可以使用两个 TLS 配置:
- 单向 TLS,其中只有代理提供证书。这是最常见的配置。
- 双向(或 mutual)TLS,其中代理和客户端(或其他代理)都存在证书。
5.1.1. 配置单向 TLS
以下流程演示了如何为单向 TLS 配置给定接受者。
-
打开 &
lt;broker_instance_dir> /etc/broker.xml
配置文件。 对于给定的接受者,添加
sslEnabled
键并将值设为true
。另外,添加keyStorePath
和keyStorePassword
密钥。设置与代理密钥存储对应的值。例如:<acceptor name="artemis">tcp://0.0.0.0:61616?sslEnabled=true;keyStorePath=../etc/broker.keystore;keyStorePassword=1234!</acceptor>
5.1.2. 配置双向 TLS
以下流程演示了如何配置双向 TLS。
先决条件
- 您必须已经为单向 TLS 配置给定接受者。更多信息请参阅 第 5.1.1 节 “配置单向 TLS”。
流程
-
打开 &
lt;broker_instance_dir> /etc/broker.xml
配置文件。 对于您之前为单向 TLS 配置的 acceptor,请添加
needClientAuth
密钥。将值设为true
。例如:<acceptor name="artemis">tcp://0.0.0.0:61616?sslEnabled=true;keyStorePath=../etc/broker.keystore;keyStorePassword=1234!;needClientAuth=true</acceptor>
上一步中的配置假定客户端的证书由可信提供者签名。如果客户端证书 不是由 可信供应商(例如自签名)签名,那么代理需要将客户端证书导入到信任存储中。在这种情况下,添加
trustStorePath
和trustStorePassword
密钥。设置与代理信任存储对应的值。例如:<acceptor name="artemis">tcp://0.0.0.0:61616?sslEnabled=true;keyStorePath=../etc/broker.keystore;keyStorePassword=1234!;needClientAuth=true;trustStorePath=../etc/client.truststore;trustStorePassword=5678!</acceptor>
AMQ Broker 支持多种协议,每个协议和平台都有不同的方法来指定 TLS 参数。但是,在使用核心协议(a bridge)的客户端时,TLS 参数是在连接器 URL 上配置,就像在代理的 acceptor 上一样。
如果自签名证书在 Java 虚拟机(JVM)信任存储中被列为可信证书,则 JVM 不会验证证书的到期日期。在生产环境中,红帽建议您使用证书颁发机构签名的证书。
5.1.3. TLS 配置选项
下表显示了所有可用的 TLS 配置选项。
选项 | 备注 |
---|---|
|
指定是否为连接启用 SSL。必须设置为 |
| 在接受者上使用时:到包含代理 证书的代理上的 TLS 密钥存储的路径(无论是自签名还是由颁发机构签名)。
在连接器上使用时: 包含客户端证书的客户端上的 TLS 密钥存储的路径。只有在您使用双向 TLS 时,这才与连接器相关。虽然您可以在代理上配置这个值,但它会被下载并使用。如果客户端需要使用与代理上设置的不同路径,它可以使用标准的 |
| 在接受者上使用时: 代理上密钥存储的密码。
在连接器上使用时: 客户端上密钥存储的密码。只有在您使用双向 TLS 时,这才与连接器相关。虽然您可以在代理上配置这个值,但它会被下载并使用。如果客户端需要使用与代理上设置的不同密码,那么它可以使用标准的 |
| 在 接受器上使用时: 代理上 TLS 信任存储的路径,其中包含代理信任的所有客户端的密钥。只有在您使用双向 TLS 时,这才与接受者相关。
在 连接器上使用时: 客户端上 TLS 信任存储的路径,其中包含客户端信任的所有代理的公钥。虽然您可以在代理上配置这个值,但它会被下载并使用。如果客户端需要使用与服务器上设置的不同路径,那么它可以使用标准的 |
| 在 接受者中使用时: 代理上信任存储的密码。只有在您使用双向 TLS 时,这才与接受者相关。
在连接器中使用时: 客户端上信任存储的密码。虽然您可以在代理上配置这个值,但它会被下载并使用。如果客户端需要使用与代理上设置的不同密码,那么它可以使用标准的 |
| 以逗号分隔的密码套件列表,用于接受器或连接器的 TLS 通信。
指定客户端应用程序支持的最安全密码套件。如果您指定了代理和客户端通用的、以逗号分隔的密码套件列表,或者您没有指定任何密码套件、代理和客户端相互协商要使用的密码套件。如果您不知道要指定哪个密码套件,您可以首先与以 debug 模式运行的客户端建立 broker-client 连接,以验证代理和客户端通用的密码套件。然后,在代理上配置
可用的密码套件取决于代理和客户端使用的 TLS 协议版本。如果在升级代理后默认 TLS 协议版本有变化,您可能需要选择早期的 TLS 协议版本,以确保代理和客户端可以使用通用密码套件。如需更多信息,请参阅 |
| 无论在接受者或连接器中使用,这是以逗号分隔的用于 TLS 通信的协议列表。如果没有指定 TLS 协议版本,代理将使用 JVM 的默认版本。
如果代理使用 JVM 的默认 TLS 协议版本,且升级代理后该版本会改变,代理和客户端使用的 TLS 协议版本可能会不兼容。虽然建议您使用更新的 TLS 协议版本,但您可以在 |
|
此属性仅适用于接受者。它指示客户端连接到需要双向 TLS 的接受者。有效值为 |