IBM MQ classes for Java 中的 TLS CipherSpecs 和 CipherSuites

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

下表列出了 IBM MQ 支持的 CipherSpecs 及其对应的 CipherSuites。

您应查看主题 "已废弃的 CipherSpecs ",以了解下表中列出的 CipherSpecs, 是否已被 IBM MQ 废弃,如果是, CipherSpec 是在哪次更新时被废弃的。

重要信息: 列出的 CipherSuites 均由 IBM Java 运行时环境 (JRE) 支持,随 IBM MQ 提供。 列出的 CipherSuites 包括 Oracle Java JRE 支持的。 有关配置应用程序以使用 Oracle Java JRE 的详细信息,请参阅配置应用程序以使用 IBM Java 或 Oracle Java CipherSuite 映射
下表还指明了用于通信的协议,以及 CipherSuite 是否符合 FIPS 140-2 标准。
注:UNIX, Linux®, and Windows 上, IBM MQ 通过 IBM Crypto for C (ICC) 密码模块提供 FIPS 140-2 合规性。 此模块的证书已移至历史状态。 客户应查看 IBM Crypto for C (ICC) 证书 ,并了解 NIST 提供的任何建议。 替代 FIPS 140-3 模块目前正在进行中,可在 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 Service Refresh 4 Fix Pack 2 或更高级别的 JRE 提供适当的支持。 IBM

注意: 要使用某些 CipherSuites, ,需要在 JRE 中配置 "非限制 "策略文件。 有关如何在 SDK 或 JRE 中设置策略文件的详细信息,请参阅 IBM SDK 的安全参考, Java 技术版 中与所使用版本相关的 IBM SDK 策略文件 主题。
表 1. CipherSpecs 受 IBM MQ 及其等效 CipherSuites 支持
CipherSpec 等效 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 TLSv1.2 yes
ECDHE_ECDSA_AES_128_CBC_SHA256 SSL_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLSv1.2 yes
ECDHE_ECDSA_AES_128_GCM_SHA256 SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLSv1.2 yes
ECDHE_ECDSA_AES_256_CBC_SHA384 SSL_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLSv1.2 yes
ECDHE_ECDSA_AES_256_GCM_SHA384 SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLSv1.2 yes
ECDHE_ECDSA_NULL_SHA256 SSL_ECDHE_ECDSA_WITH_NULL_SHA TLS_ECDHE_ECDSA_WITH_NULL_SHA TLSv1.2 False
ECDHE_ECDSA_RC4_128_SHA256 SSL_ECDHE_ECDSA_WITH_RC4_128_SHA TLS_ECDHE_ECDSA_WITH_RC4_128_SHA TLSv1.2 False
ECDHE_RSA_3DES_EDE_CBC_SHA256 SSL_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA TLSv1.2 yes
ECDHE_RSA_AES_128_CBC_SHA256 SSL_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLSv1.2 yes
ECDHE_RSA_AES_128_GCM_SHA256 SSL_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLSv1.2 yes
ECDHE_RSA_AES_256_CBC_SHA384 SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLSv1.2 yes
ECDHE_RSA_AES_256_GCM_SHA384 SSL_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLSv1.2 yes
ECDHE_RSA_NULL_SHA256 SSL_ECDHE_RSA_WITH_NULL_SHA TLS_ECDHE_RSA_WITH_NULL_SHA TLSv1.2 False
ECDHE_RSA_RC4_128_SHA256 SSL_ECDHE_RSA_WITH_RC4_128_SHA TLS_ECDHE_RSA_WITH_RC4_128_SHA TLSv1.2 False
TLS_RSA_WITH_3DES_EDE_CBC_SHA 1 SSL_RSA_WITH_3DES_EDE_CBC_SHA TLS_RSA_WITH_3DES_EDE_CBC_SHA TLSv1 2
TLS_RSA_WITH_AES_128_CBC_SHA SSL_RSA_WITH_AES_128_CBC_SHA TLS_RSA_WITH_AES_128_CBC_SHA TLSv1 2
TLS_RSA_WITH_AES_128_CBC_SHA256 SSL_RSA_WITH_AES_128_CBC_SHA256 TLS_RSA_WITH_AES_128_CBC_SHA256 TLSv1.2 2
TLS_RSA_WITH_AES_128_GCM_SHA256 SSL_RSA_WITH_AES_128_GCM_SHA256 TLS_RSA_WITH_AES_128_GCM_SHA256 TLSv1.2 2
TLS_RSA_WITH_AES_256_CBC_SHA SSL_RSA_WITH_AES_256_CBC_SHA TLS_RSA_WITH_AES_256_CBC_SHA TLSv1 2
TLS_RSA_WITH_AES_256_CBC_SHA256 SSL_RSA_WITH_AES_256_CBC_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA256 TLSv1.2 2
TLS_RSA_WITH_AES_256_GCM_SHA384 SSL_RSA_WITH_AES_256_GCM_SHA384 TLS_RSA_WITH_AES_256_GCM_SHA384 TLSv1.2 2
TLS_RSA_WITH_DES_CBC_SHA SSL_RSA_WITH_DES_CBC_SHA SSL_RSA_WITH_DES_CBC_SHA TLSv1 False
TLS_RSA_WITH_NULL_SHA256 SSL_RSA_WITH_NULL_SHA256 TLS_RSA_WITH_NULL_SHA256 TLSv1.2 False
TLS_RSA_WITH_RC4_128_SHA256 SSL_RSA_WITH_RC4_128_SHA SSL_RSA_WITH_RC4_128_SHA TLSv1.2 False
注:
  1. 不推荐此 CipherSpec TLS_RSA_WITH_3DES_EDE_CBC_SHA。 但是,它仍可用于传输最多 32 GB 数据,超过此数据量之后,连接将因错误 AMQ9288 而终止。 要避免此错误,您需要避免使用三重 DES,或在使用此 CipherSpec 时启用密钥重置。
  2. [ MQ 9.0.0.24 2024 年 4 月]IBM MQ 9.0.0 CSU 24 开始,当以 FIPS 模式运行时, IBM Java 8 JRE 不再支持 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 映射

您可以配置应用程序是使用默认的 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 博客文章 MQ Java、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 时启用密钥重置。