IBM MQ classes for Java 中的 TLS CipherSpecs 和 CipherSuites

IBM® MQ classes for Java 应用程序与队列管理器建立连接的能力取决于在 MQI 通道的服务器端指定的 CipherSpec 和在客户机端指定的 CipherSuite 。

下表列出了 IBM MQ 及其等效 CipherSuites支持的 CipherSpecs 。

[不推荐]您应该查看主题 已弃用 CipherSpecs ,看看下表中列出的任何 CipherSpecs, 是否已被 IBM MQ 弃用,如果是,则在哪个更新中弃用了 CipherSpec 。

重要信息: 列出的 CipherSuites 是随 IBM MQ提供的 IBM Java 运行时环境 (JRE) 支持的套件。 列出的 CipherSuites 包含 Oracle Java JRE 支持的套件。 有关配置应用程序以使用 Oracle Java JRE 的更多信息,请参阅 配置应用程序以使用 IBM Java 或 Oracle Java CipherSuite 映射
下表还指明了用于通信的协议,以及 CipherSuite 是否符合 FIPS 140-2 标准。
注:AIX®, Linux®, and Windows上, IBM MQ 通过 IBM Crypto for C (ICC) 加密模块提供 FIPS 140-$tag5 合规性。 此模块的证书已移至历史状态。 客户应查看 IBM Crypto for C (ICC) 证书 并了解 NIST 提供的任何建议。 当前正在进行 FIPS 140-$tag1 替换模块,可以通过在 流程列表中的 NIST CMVP 模块中搜索该模块来查看其状态。

如果应用程序未配置为强制实施 FIPS 140-2 合规性,可以使用标记为符合 FIPS 140-2 标准的 Ciphersuite,但如果为应用程序配置了 FIPS 140-2 合规性(请参阅下面有关配置的注释),那么只有标记为符合 FIPS 140-2 标准的那些 CipherSuite 才能配置;尝试使用其他 CipherSuite 会导致错误。

注: 每个 JRE 都可以有多个加密安全提供程序,每个提供程序都可以提供同一 CipherSuite的实现。 然而,并非所有安全提供程序都是经过 FIPS 140-2 认证的。 如果未对应用程序强制实施 FIPS 140-2 合规性,可能会使用未经过认证的 CipherSuite 实现。 未经过认证的实现可能无法与 FIPS 140-2 兼容,即使 CipherSuite 在理论上符合该标准要求的最低安全级别也不例外。 请参阅以下说明,以获取有关在 IBM MQ Java 应用程序中配置 FIPS 140-2 实施的更多信息。

如需了解CipherSpecs 和 CipherSuites, 符合FIPS 140-2和Suite-B标准的更多信息,请参阅 《指定 CipherSpecs 》。 您可能还需要了解与美国 联邦信息处理标准相关的信息。

要使用完整的 CipherSuite 集,并使用经过认证的 FIPS 140-2 和/或 Suite-B 合规性进行操作,需要一个合适的 JRE。 IBM Java 7 服务刷新 4 修订包 2 或更高级别的 IBM JRE 为 表 1中列出的 TLS 1.2 CipherSuites 提供相应支持。

为了能够使用 TLS 1.3 密码,运行应用程序的 JRE 必须支持 TLS 1.3。

注意 :要使用某些CipherSuites, ,需要在JRE中配置“无限制”策略文件。 有关如何在 SDK 或 JRE 中设置策略文件的更多详情,请参阅 IBM SDK 的安全参考, Java 技术版 中的 IBM SDK 安全策略文件
表 1. CipherSpecs 受 IBM MQ 及其等效 CipherSuites 支持
CipherSpec 1 等效的 CipherSuite (IBM JRE) 对应的 CipherSuite (Oracle JRE) 协议 是否符合 FIPS 140-2 标准
ECDHE_ECDSA_3DES_EDE_CBC_SHA256 SSL_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA TLS 1.2 yes
ECDHE_ECDSA_AES_128_CBC_SHA256 SSL_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS 1.2 yes
ECDHE_ECDSA_AES_128_GCM_SHA256 SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS 1.2 yes
ECDHE_ECDSA_AES_256_CBC_SHA384 SSL_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS 1.2 yes
ECDHE_ECDSA_AES_256_GCM_SHA384 SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS 1.2 yes
ECDHE_ECDSA_NULL_SHA256 SSL_ECDHE_ECDSA_WITH_NULL_SHA TLS_ECDHE_ECDSA_WITH_NULL_SHA TLS 1.2
ECDHE_ECDSA_RC4_128_SHA256 SSL_ECDHE_ECDSA_WITH_RC4_128_SHA TLS_ECDHE_ECDSA_WITH_RC4_128_SHA TLS 1.2
ECDHE_RSA_3DES_EDE_CBC_SHA256 SSL_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA TLS 1.2 yes
ECDHE_RSA_AES_128_CBC_SHA256 SSL_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS 1.2 yes
ECDHE_RSA_AES_128_GCM_SHA256 SSL_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS 1.2 yes
ECDHE_RSA_AES_256_CBC_SHA384 SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS 1.2 yes
ECDHE_RSA_AES_256_GCM_SHA384 SSL_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS 1.2 yes
ECDHE_RSA_NULL_SHA256 SSL_ECDHE_RSA_WITH_NULL_SHA TLS_ECDHE_RSA_WITH_NULL_SHA TLS 1.2
ECDHE_RSA_RC4_128_SHA256 SSL_ECDHE_RSA_WITH_RC4_128_SHA TLS_ECDHE_RSA_WITH_RC4_128_SHA TLS 1.2
TLS_RSA_WITH_3DES_EDE_CBC_SHA 2 SSL_RSA_WITH_3DES_EDE_CBC_SHA TLS_RSA_WITH_3DES_EDE_CBC_SHA TLS 1.0 4
TLS_RSA_WITH_AES_128_CBC_SHA SSL_RSA_WITH_AES_128_CBC_SHA TLS_RSA_WITH_AES_128_CBC_SHA TLS 1.0 4
TLS_RSA_WITH_AES_128_CBC_SHA256 SSL_RSA_WITH_AES_128_CBC_SHA256 TLS_RSA_WITH_AES_128_CBC_SHA256 TLS 1.2 4
TLS_RSA_WITH_AES_128_GCM_SHA256 SSL_RSA_WITH_AES_128_GCM_SHA256 TLS_RSA_WITH_AES_128_GCM_SHA256 TLS 1.2 4
TLS_RSA_WITH_AES_256_CBC_SHA SSL_RSA_WITH_AES_256_CBC_SHA TLS_RSA_WITH_AES_256_CBC_SHA TLS 1.0 4
TLS_RSA_WITH_AES_256_CBC_SHA256 SSL_RSA_WITH_AES_256_CBC_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA256 TLS 1.2 4
TLS_RSA_WITH_AES_256_GCM_SHA384 SSL_RSA_WITH_AES_256_GCM_SHA384 TLS_RSA_WITH_AES_256_GCM_SHA384 TLS 1.2 4
TLS_RSA_WITH_DES_CBC_SHA SSL_RSA_WITH_DES_CBC_SHA SSL_RSA_WITH_DES_CBC_SHA TLS 1.0
TLS_RSA_WITH_NULL_SHA256 SSL_RSA_WITH_NULL_SHA256 TLS_RSA_WITH_NULL_SHA256 TLS 1.2
TLS_RSA_WITH_RC4_128_SHA256 SSL_RSA_WITH_RC4_128_SHA SSL_RSA_WITH_RC4_128_SHA TLS 1.2
ANY_TLS12 *TLS12 *TLS12 TLS 1.2 yes
TLS_AES_128_GCM_SHA256 3 TLS_AES_128_GCM_SHA256 TLS_AES_128_GCM_SHA256 TLS V1.3
TLS_AES_256_GCM_SHA384 3 TLS_AES_256_GCM_SHA384 TLS_AES_256_GCM_SHA384 TLS V1.3
TLS_CHACHA20_POLY1305_SHA256 3 TLS_CHACHA20_POLY1305_SHA256 TLS_CHACHA20_POLY1305_SHA256 TLS V1.3
TLS_AES_128_CCM_SHA256 3 TLS_AES_128_CCM_SHA256 TLS_AES_128_CCM_SHA256 TLS V1.3
TLS_AES_128_CCM_8_SHA256 3 TLS_AES_128_CCM_8_SHA256 TLS_AES_128_CCM_8_SHA256 TLS V1.3
ANY 3 *ANY *ANY 多个
ANY_TLS13 3 *TLS13 *TLS13 TLS V13
ANY_TLS12_OR_HIGHER 3 *TLS12ORHIGHER *TLS12ORHIGHER TLS 1.2 及更高版本
ANY_TLS13_OR_HIGHER 3 *TLS13ORHIGHER *TLS13ORHIGHER TLS 1.3 及更高版本
注:
  1. 这是在 IBM MQ中的通道上配置的值,包括在 CCDT (二进制或 JSON) 中。
  2. [不推荐]不推荐 CipherSpec TLS_RSA_WITH_3DES_EDE_CBC_SHA。 但是,它仍可用于传输最多 32 GB 数据,超过此数据量之后,连接将因错误 AMQ9288 而终止。 要避免此错误,您需要避免使用三重 DES,或在使用此 CipherSpec 时启用密钥重置。
  3. 要能够使用 TLS v1.3 密码,运行应用程序的 Java runtime environment (JRE) 必须支持 TLS v1.3。
  4. [MQ 9.3.5.1 2024 年 4 月][MQ 9.3.0.17 2024 年 4 月]IBM MQ 9.3.5 CSU 1IBM MQ 9.3.0 CSU 17 起, IBM Java 8 JRE 在 FIPS 模式下运行时不再支持 RSA 密钥交换。

IBM MQ classes for Java 应用程序中配置密码套件和 FIPS 合规性

  • 使用 IBM MQ classes for Java 的应用程序可以使用以下两种方法之一来设置连接的 CipherSuite :
    • 将 MQEnvironment 类中的 sslCipherSuite 字段设置为 CipherSuite 名称。
    • 将传递到 MQQueueManager 构造函数的属性哈希表中的属性 CMQC.SSL_CIPHER_SUITE_PROPERTY 设置为 CipherSuite 名称。
  • 使用 IBM MQ classes for Java 的应用程序可以使用以下两种方法之一来强制实施 FIPS 140-2 合规性:
    • 将 MQEnvironment 类中的 sslFipsRequired 字段设置为 True。
    • 将传递到 MQQueueManager 构造函数的属性哈希表中的属性 CMQC.SSL_FIPS_REQUIRED_PROPERTY 设置为 True。

配置应用程序以使用 IBM Java 或 Oracle Java CipherSuite 映射

注:
[MQ 9.3.3 2023 年 6 月]对于 Continuous Delivery from IBM MQ 9.3.3 ,产品中删除了 Java 系统属性 com.ibm.mq.cfg.useIBMCipherMappings ,该属性控制使用哪些映射。 从 IBM MQ 9.3.3开始,可以将密码定义为 CipherSpec 或 CipherSuite 名称,并由 IBM MQ正确处理。 如果 IBM MQ classes for Java 应用程序创建到队列管理器的安全 TLS 连接,那么需要以下三个 Jackson JAR 文件:
  • jackson-annotations.jar
  • jackson-core.jar
  • jackson-databind.jar
重要信息: 有关 com.ibm.mq.cfg.useIBMCipherMappings 的以下信息仅适用于 IBM MQ 9.3.3 之前的 Long Term SupportContinuous Delivery
您可以配置应用程序是使用缺省 IBM Java CipherSuite 到 IBM MQ CipherSpec 映射,还是使用 Oracle CipherSuite 到 IBM MQ CipherSpec 映射。 因此,无论应用程序是使用 IBM JRE 还是 Oracle JRE,您都可以使用 TLS CipherSuite。 Java 系统属性 com.ibm.mq.cfg.useIBMCipherMappings 控制使用哪些映射。 该属性可以具有以下某个值:
true
使用 IBM Java CipherSuite 到 IBM MQ CipherSpec 映射。
该值为缺省值。
false
使用 Oracle CipherSuite 到 IBM MQ CipherSpec 映射。

有关使用的更多信息 IBM MQJava 和 TLS 密码,请参阅 MQdev 博客文章 MQJava、TLS 密码、非 IBM JRE 和 APAR IT06775、 IV66840、 IT09423、 IT10837

互操作性限制

某些CipherSuites可能与多个 IBM MQ CipherSpec,兼容,具体取决于所使用的协议。 但是,仅支持使用表1中指定的TLS版本CipherSuite/CipherSpec。 尝试使用不支持的 CipherSuite 和 CipherSpec 组合会导致失败,并出现相应异常。 使用任何这些 CipherSuite/CipherSpec 组合的安装都应转为使用支持的组合。

下表显示了受此限制影响的 CipherSuite。

表 2. CipherSuite 及其支持和不支持的 CipherSpec
CipherSuite 支持的 TLS CipherSpec 不支持的 SSL CipherSpec
SSL_RSA_WITH_3DES_EDE_CBC_SHA TLS_RSA_WITH_3DES_EDE_CBC_SHA 1 TRIPLE_DES_SHA_US
SSL_RSA_WITH_DES_CBC_SHA TLS_RSA_WITH_DES_CBC_SHA DES_SHA_EXPORT
SSL_RSA_WITH_RC4_128_SHA TLS_RSA_WITH_RC4_128_SHA256 RC4_SHA_US
注:
  1. [不推荐]不推荐此 CipherSpec TLS_RSA_WITH_3DES_EDE_CBC_SHA。 但是,它仍可用于传输最多 32 GB 数据,超过此数据量之后,连接将因错误 AMQ9288 而终止。 要避免此错误,您需要避免使用三重 DES,或在使用此 CipherSpec 时启用密钥重置。