第 5 章 保护代理
5.1. 保护连接
当代理连接到消息传递客户端或代理连接到其他代理时,您可以使用传输层安全(TLS)保护这些连接。
您可以使用两个 TLS 配置:
- 单向 TLS,其中只有代理提供证书。这是最常见的配置。
- 双向(或 mutual)TLS,代理和客户端(或其他代理)都提供证书。
5.1.1. 配置单向 TLS
以下流程演示了如何为单向 TLS 配置给定接受者。
-
打开 &
lt;broker_instance_dir> /etc/broker.xml
配置文件。 对于给定的 acceptor,添加
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 参数。但是,对于使用核心协议(一个网桥)的客户端,TLS 参数在连接器 URL 上配置,与代理接受器上类似。
如果在 Java 虚拟机(JVM)信任存储中被列为可信证书,则 JVM 不会验证证书的到期日期。在生产环境中,红帽建议您使用由证书颁发机构签名的证书。
5.1.3. TLS 配置选项
下表显示了所有可用的 TLS 配置选项。
选项 | 备注 |
---|---|
|
指定是否为连接启用 SSL。必须设置为 |
| 当在包含代理证书的 代理(无论是自签名还是由颁发机构签名)上的代理上到 TLS 密钥存储的路径时。
在连接器中使用时: 包含客户端证书的客户端上的 TLS 密钥存储的路径。这只有在您使用双向 TLS 时与连接器相关。虽然您可以在代理上配置这个值,但被下载并供客户端使用。如果客户端需要使用与代理上设置的不同路径,它可以使用标准 |
| 当在 acceptor: Password 中使用 时,代理上的密钥存储。
在连接器中使用时: 客户端上密钥存储的密码。这只有在您使用双向 TLS 时与连接器相关。虽然您可以在代理上配置这个值,但被下载并供客户端使用。如果客户端需要使用与代理上设置的不同密码,那么它可以使用标准 |
| 当在接受器上使用时: 包含代理信任的所有客户端密钥的代理上 TLS 信任存储的路径。这只有在您使用双向 TLS 时与接受者相关。
在连接器中使用时: 包含客户端信任的所有代理的公钥的客户端上 TLS 信任存储的路径。虽然您可以在代理上配置这个值,但被下载并供客户端使用。如果客户端需要使用与服务器上设置的不同路径,那么可以使用标准的 |
| 当在 acceptor: Password 中使用 时,代理上的信任存储的密码。这只有在您使用双向 TLS 时与接受者相关。
在连接器中使用时: 客户端上信任存储的密码。虽然您可以在代理上配置这个值,但被下载并供客户端使用。如果客户端需要使用与代理上设置的不同密码,那么它可以使用标准 |
| 以逗号分隔的密码套件列表,用于接受器或连接器的 TLS 通信。
指定客户端应用程序支持的最安全密码套件。如果您指定了代理和客户端通用的、以逗号分隔的密码套件列表,或者您没有指定任何密码套件、代理和客户端相互协商要使用的密码套件。如果您不知道要指定哪个密码套件,您可以首先与以 debug 模式运行的客户端建立 broker-client 连接,以验证代理和客户端通用的密码套件。然后,在代理上配置
可用的密码套件取决于代理和客户端使用的 TLS 协议版本。如果在升级代理后默认 TLS 协议版本有变化,您可能需要选择早期的 TLS 协议版本,以确保代理和客户端可以使用通用密码套件。如需更多信息,请参阅 |
| 无论是在接收器还是连接器中使用,这是用于 TLS 通信的、以逗号分隔的协议列表。如果没有指定 TLS 协议版本,代理将使用 JVM 的默认版本。
如果代理使用 JVM 的默认 TLS 协议版本,且升级代理后该版本会改变,代理和客户端使用的 TLS 协议版本可能会不兼容。虽然建议您使用更新的 TLS 协议版本,但您可以在 |
|
此属性仅适用于 acceptor。它指示客户端连接接受者需要双向 TLS。有效值为 |