跳到主要内容

TLS/SSL加密

默认情况下,客户端使用 TCP 明文与 Solace PubSub+ 事件代理交换数据,且交换的数据未压缩。

然而,客户端可以使用传输层安全(TLS)/安全套接字层(SSL)加密连接到事件代理。这允许通过 TLS/SSL 在单个 TCP 连接上而不是通过 TCP 明文与事件代理交换未压缩的 Solace 消息格式(SMF)数据或 Solace 元素管理协议(SEMP)数据。

使用 TLS/SSL 加密连接到事件代理提供了以下优势:

  • 保密性——消息只能由预期的接收者接收
  • 消息完整性——消息在发送后不能被修改
  • 服务器认证——连接的应用程序能够验证其通信的服务器是其认为的服务器
  • 客户端认证——可选的客户端证书可以作为客户端认证的一种形式(有关详细信息,请参阅客户端认证)

以下类型的客户端可以建立到事件代理的 TLS/SSL 加密连接:

  • 发布和/或接收消息的客户端应用程序。

默认情况下,当客户端应用程序连接到事件代理并创建会话时,该会话是不安全的。然而,客户端应用程序可以选择创建一个需要可信服务器证书以建立到事件代理的 TLS/SSL 加密客户端连接的安全会话。

客户端应用程序可以使用 Solace 消息 API 建立到事件代理的安全连接。

  • 通过 SEMP 请求和回复管理并监控事件代理的网络管理应用程序。
    • 如果网络管理应用程序使用 SEMP 请求通过消息总线服务,该服务使用 Solace 消息 API 通过会话建立客户端连接,则 SEMP 请求和回复可以通过事件代理消息总线发送。可以以与客户端应用程序相同的方式建立安全会话。
    • 如果网络管理应用程序使用 SEMP 请求通过 HTTP 服务,TCP 连接到事件代理上的端口允许应用程序将 SEMP 请求包装在 HTTP 中发送到事件代理上的管理接口,并接收它们的回复。对于 SEMP 请求通过 HTTP 服务,当在事件代理上设置服务器证书、指定 TLS/SSL 安全端口(默认为 443)并使用 HTTPS URL 方案时,可以创建安全连接。

SSL 加密也可以用于消息 VPN 桥接和由消息 VPN 复制及复制 Config-Sync 设施建立的桥接。在桥接链路上使用加密有助于确保事件代理之间通过桥接的通信是安全的。

由于加密和解密数据需要处理能力,启用 TLS/SSL 加密可能会导致性能降低。

密码套件

以下加密算法在整个 TLS/SSL 加密连接的生命周期中使用:

  1. 密钥建立——此算法用于交换或协商在会话期间用于加密和解密数据负载的对称密钥。示例:RSA、Diffie-Hellman (DH)、临时 Diffie-Hellman (DHE) 和椭圆曲线 Diffie-Hellman (ECDH)。
  2. 认证——此算法是客户端应用程序和服务器之间传递的证书使用的数字签名。示例:RSA 和数字签名标准(DSS)。
  3. 加密——此算法加密和解密安全会话上通过的数据负载。示例:RC4、3DES CBC 和高级加密标准(AES)。
  4. 摘要——此算法用于维护消息完整性。篡改消息会使摘要无效。示例:SHA1、MD5。

这四种加密算法的组合称为密码套件。

有关事件代理支持的密码套件的完整列表,请参阅支持的密码套件。

入站连接的密码套件

事件代理为以下每种入站 TLS 连接类型维护一个单独的密码套件列表:

  • 使用 SEMP 管理事件代理的网络管理应用程序(管理连接)
  • 连接到事件代理以发布或接收消息的客户端应用程序(消息骨干连接)

根据客户端为每个密码套件关联的优先级选择所有入站管理和消息骨干连接的密码套件。

出站连接的密码套件

事件代理为以下每种出站 TLS 连接类型维护一个单独的优先级密码套件列表:

  • 消息 VPN 和桥接连接
  • 复制桥接连接
  • 配置同步桥接连接
  • 多节点路由链路

此外,事件代理使用与入站管理连接相同的密码套件列表用于出站 LDAP 连接。

根据每个相应密码套件列表中配置的优先级选择所有出站连接(包括 LDAP 连接)的密码套件。

SSH连接的密码

事件代理为所有 SSH、SCP 和 SFTP 连接维护一个密码列表。对于加密连接,密码列表具有与密码套件列表类似的功能;然而,不使用密钥建立、认证和摘要算法。有关事件代理支持的密码的完整列表,请参阅支持的密码。

根据客户端为每个密码关联的优先级选择所有 SSH 连接的密码。

支持的密码套件

下表显示了事件代理支持的入站和出站连接的密码套件完整列表。

支持的密码套件(从强到弱)

OpenSSL 名称IANA 名称默认安全策略FIPS 合规安全策略
ECDHE-RSA-AES256-GCM-SHA384TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384支持支持
ECDHE-RSA-AES256-SHA384TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384支持支持
ECDHE-RSA-AES256-SHATLS_ECDHE_RSA_WITH_AES_256_CBC_SHA支持支持
AES256-GCM-SHA384TLS_AES_256_GCM_SHA384支持不支持
AES256-SHA256TLS_RSA_WITH_AES_256_CBC_SHA256支持不支持
AES256-SHATLS_RSA_WITH_AES_256_CBC_SHA支持不支持
ECDHE-RSA-DES-CBC3-SHATLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA不支持不支持
DES-CBC3-SHASSL_RSA_WITH_3DES_EDE_CBC_SHA不支持不支持
ECDHE-RSA-AES128-GCM-SHA256TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256支持支持
ECDHE-RSA-AES128-SHA256TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256支持支持
ECDHE-RSA-AES128-SHATLS_ECDHE_RSA_WITH_AES_128_CBC_SHA支持支持
AES128-GCM-SHA256TLS_RSA_WITH_AES_128_GCM_SHA256支持不支持
AES128-SHA256TLS_RSA_WITH_AES_128_CBC_SHA256支持不支持
AES128-SHATLS_RSA_WITH_AES_128_CBC_SHA支持不支持

使用 TLS 1.2 时,证书密钥长度必须至少为 1024 位。使用短于 1024 位的密钥时,您可能会收到“摘要对 RSA 密钥太大”错误。

支持的密码

下表显示了事件代理支持的 SSH 连接的密码完整列表。

密码默认安全策略FIPS 合规安全策略
aes128-ctr支持支持
aes192-ctr支持支持
aes256-ctr支持支持
aes128-gcm@openssh.com支持不支持
aes256-gcm@openssh.com支持不支持

支持的密码

配置密码和密码套件列表

您可以配置每个默认密码和密码套件列表,以避免使用指定的密码或密码套件,或者您可以重新排序每个列表以更改与给定密码或密码套件关联的优先级。

要配置入站连接的密码套件列表,请参阅配置入站连接的密码套件。

要配置出站连接的密码套件列表,请参阅以下部分:

  • 对于消息 VPN 和桥接连接,请参阅配置 VPN 桥接。
  • 对于复制桥接和复制 Config-Sync 连接,请参阅配置系统级复制设置。
  • 对于 LDAP 连接,请参阅配置管理连接的密码套件。事件代理使用与管理连接相同的密码套件列表用于 LDAP 连接。
  • 对于多节点路由链路,请参阅多节点路由。

要配置 SSH 连接的密码,请参阅配置 SSH 连接的密码。

支持的签名算法

如果证书链中的所有证书都使用以下签名算法之一签名,事件代理可以验证证书链:

签名算法默认安全策略FIPS 合规安全策略
md2withRSAEncryption, md4withRSAEncryption, md5withRSAEncryption支持不支持
shawithRSAEncryption, sha1withRSAEncryption, sha1withDSAEncryption支持不支持
sha224withRSAEncryption支持支持(密钥必须大于或等于 2048 位)
sha224withDSAEncryption支持不支持
sha256withRSAEncryption支持支持(密钥必须大于或等于 2048 位)
sha256withDSAEncryption支持不支持
sha384withRSAEncryption支持支持(密钥必须大于或等于 2048 位)
sha512withRSAEncryption支持支持(密钥必须大于或等于 2048 位)

支持的签名算法

服务器证书认证过程

当客户端或管理应用程序连接到事件代理并需要证书验证以建立安全连接时,使用以下过程。

使用 TLS/SSL 的证书验证过程

img

  1. 客户端或管理应用程序连接到事件代理的 TLS/SSL 监听端口。
  2. 事件代理向客户端或管理应用程序回复其服务器证书。

如果使用 Active/Active 冗余配置,冗余对中的每个事件代理应有自己的服务器证书,其有自己的通用名称。如果使用 Active/Standby 冗余配置,两个配对可以共享一个使用主事件代理名称作为通用名称的服务器证书。

  1. 客户端或管理应用程序验证服务器证书是否有效,是否如预期命名,并且是否由可信根证书颁发机构颁发。
  2. 如果验证成功,客户端或管理应用程序将回复并继续完成握手。

证书颁发机构

在 9.8.0 版本之前,PubSub+ 事件代理使用单个证书颁发机构(CA)列表用于入站和出站 TLS 连接以及 CRL 和 OCSP。此列表未预填充,意味着您需要在启用入站或出站连接的 TLS 加密之前配置列表和相应的 CA 证书。

在 9.8.0+ 版本中,PubSub+ 事件代理使用三个 CA 列表:

  • 标准域名验证列表——一个预填充的标准、受信任的域名验证根证书列表,用于验证所有出站 TLS 连接的服务器名称,包括用于 OCSP 请求和获取 CRL 的 TLS 连接。事件代理在域名验证期间使用此列表和域名验证列表的组合。此列表不能修改,然而,您可以禁用它并仅使用域名验证列表。
  • 域名验证列表——用于验证所有出站 TLS 连接的服务器名称,包括用于 OCSP 请求和获取 CRL 的 TLS 连接。您可以修改此列表中的 CA 以适应您的部署。
  • 客户端认证列表——用于验证入站 TLS 连接的客户端证书,CRL 和 OCSP 响应。

要配置 CA 列表,请参阅配置证书颁发机构。

证书吊销检查

从 8.2.0 版本开始,Solace PubSub+ 设备支持检查客户端证书的吊销状态,从 8.7.0 版本开始,Solace PubSub+ 软件事件代理支持此功能。在这些版本之前,虽然验证客户端证书时,事件代理不会检查证书的吊销状态。

事件代理可以检查客户端尝试认证时使用的证书的吊销状态。证书吊销在每个事件代理基础上是可配置的,并且每个消息 VPN 有覆盖选项。您可以配置消息 VPN 覆盖以忽略吊销检查的结果,或者允许具有未知吊销状态的证书认证。有关详细信息,请参阅配置消息 VPN 覆盖。

证书链的吊销状态可以有以下状态之一:

  • 有效——证书链中的所有证书都已检查吊销状态,并且它们是否有效。
  • 未知——证书链中的一个或多个证书无法验证。然而,如果证书未吊销且 CA 未知,OCSP 可能会返回未知。
  • 已吊销——证书链中的一个或多个证书已吊销。

启用证书吊销检查后,可能导致证书链状态为未知的几种潜在条件。下面的信息描述了启用 CRL、OCSP 或 OCSP-CRL 证书吊销检查时这些条件:

  • CRL——如果未缓存 CRL 的副本或 CRL 已过期。

  • OCSP——如果事件代理在默认超时时间内未从 OCSP 响应器收到响应,或者响应签名者未被识别为真正的响应器。响应器必须使用颁发给特定通用名称的证书签署 OCSP 响应器,并且必须包含适当的 OCSP 标志。

  • OCSP-CRL——使用 OCSP-CRL 时,以下条件可能导致证书的吊销状态为未知:

    • OCSP 响应签名者未被识别为真正的响应器。

    • 事件代理在默认超时时间内未从 OCSP 响应器收到响应,并且未缓存 CRL 的副本,或者 CRL 已过期。

要了解 CRL、OCSP、OCSP-CRL 证书吊销检查方法,请参阅证书吊销检查方法。

支持证书吊销检查的客户端

下表显示了支持证书吊销检查的客户端列表。

支持证书吊销检查的客户端

认证来源支持证书吊销检查
SMF 客户端
MQTT 客户端
REST 发布者
REST 订阅者
Web 消息客户端

有关证书吊销配置的信息,请参阅配置证书颁发机构。

证书吊销检查方法

您可以配置事件代理使用证书吊销列表(CRL)、在线证书状态协议(OCSP)或 OCSP-CRL(这两种方法的组合)检查客户端证书的吊销状态。

CRL

CRL 包含由颁发 CA 吊销的证书列表。CA 的证书吊销列表 URL 嵌入在每个证书中。事件代理从分发点下载 CRL 并定期刷新本地副本。为了认证客户端证书,验证应用程序使用 CRL URL 下载 CRL 的本地副本,然后用于 CA 需要进行的每次吊销检查。检查证书链中所有证书及其颁发 CA 的吊销状态——从最后颁发的证书开始——到根 CA 本身。如果证书的序列号未出现在 CRL 中,则证书通过吊销检查。

在 CRL 吊销检查期间,根 CA 获得两次计数,因为它一次检查自身,一次检查链中的下一个 CA。所有其他 CA 获得一次计数,因为它们只检查下一个 CA,或者在链中最后一个 CA 的情况下,它检查尝试连接的客户端。

要启用 CRL 证书吊销检查,请参阅配置 CRL 证书吊销检查。

OCSP

OCSP 允许事件代理直接与 CA 或通过防火墙内的受信任响应器(OCSP 响应器)检查单个证书的吊销状态。客户端证书包含证书颁发者的 URL,用于检查证书的吊销状态。使用 OCSP 方法时,通过向 OCSP 响应器发送带有证书序列号的请求来验证链中的每个证书。响应器必须回复以指示证书是否已吊销,或者是否有效或未知。

要启用 OCSP 证书吊销检查,请参阅配置 OCSP 证书吊销检查。

OCSP-CRL

当同时使用 OCSP 和 CRL 证书吊销检查时,将首先使用 OCSP 检查证书链中所有证书的吊销状态。如果结果为有效、未知或已吊销,则检查完成。如果 OCSP 响应器返回未知(响应超时)或不可用,则将通过 CRL 检查证书。此过程在链中的每个证书上执行。

要启用 OCSP-CRL 证书吊销检查,请参阅配置 OCSP-CRL 证书吊销检查。