【问题标题】:Does TLS1.2 work with NSS in FIPS mode using JSSE configured with SunPKCS11-NSS providerTLS1.2 是否使用配置有 SunPKCS11-NSS 提供程序的 JSSE 在 FIPS 模式下与 NSS 一起使用
【发布时间】:2015-03-10 19:35:50
【问题描述】:

我们正在尝试让 TLS1.2 在以下环境中以 FIPS 模式工作。当尝试写入使用 SSLContext 为协议“TLSv1.2”创建的 SSLSocket 时,它失败并出现错误 java.security.NoSuchAlgorithmException: no such algorithm: SunTls12RsaPremasterSecret for provider SunPKCS11-NSS

环境:

  • Java:OpenJDK 1.8.0_25-b17(客户端和服务器)
  • 操作系统:CentOS 6.5 版(最终版)
  • NSS:nss-3.16.2.3-3.el6_6.x86_64
  • 使用 modutil 在密钥库上启用 FIPS 模式。

我相信答案是否定的,TLS1.2 不适用于 FIPS 模式下的 NSS 3.16+。我需要果断下决心:

  • 这是否预计会起作用,因此我应该继续挖掘以找出我们做错了什么(在这种情况下,请提供使这项工作的指针和想法)或
  • 它不受支持,因此我希望它会在未来的 NSS 版本中得到支持

这是目前收集到的证据:

  1. 尝试使用 TLS1.2 时出现的错误是 java.security.NoSuchAlgorithmException: no such algorithm: SunTls12RsaPremasterSecret for provider SunPKCS11-NSS。 in this post 讨论了一个相同的错误消息,表明它表示不支持 TLS 1.2。
  2. NSS 的 FIPS 验证最后一次在 2010 年在 NSS 版本 3.12.14 上执行。在 3.15.1 之前的任何 NSS 发行说明中都没有提到 TLS1.2 支持。 related question is posted here,但没有具体提及 TLSv1.2。
  3. CentOS 6.5 release notes表示支持FIPS模式和TLS1.2,但没有提及是否同时支持两者。
  4. 我们使用 TLS1.2 SSLContext(客户端和服务器)的测试在系统未处于 FIPS 模式时工作。在运行 modutil –fips true 后运行完全相同的测试会导致下面提供的描述的错误和控制台输出。

相关的 javax.net.debug 输出如下:

*** 客户端您好,TLSv1.2 RandomCookie: GMT: 1409235389 字节 = { 122, 104, 164, 187, 130, 152, 6, 95, 250, 230, 146, 99, 164, 228, 116, 203, 188, 51, 48, 140, 196, 35、87、33、228、67、15、120} 会话 ID:{} 密码套件:[TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_EMPTY_RENEGOTIATION_INFO_SCSV] 压缩方法:{0} 扩展签名算法、签名算法:SHA512withECDSA、SHA512withRSA、SHA384withECDSA、SHA384withRSA、SHA256withECDSA、SHA256withRSA、SHA224withECDSA、SHA224withRSA、SHA1withECDSA、SHA1withRSA、SHA1withDSA、MD5withRSA *** 修剪过的 %% 协商:[会话 1,TLS_RSA_WITH_AES_128_CBC_SHA256] *** 服务器你好,TLSv1.2 RandomCookie: GMT: 1409235389 字节 = { 217, 13, 11, 142, 204, 139, 77, 178, 239, 246, 177, 116, 225, 208, 217, 77, 128, 106, 206, 72, 40, 229、46、232、54、172、74、41} 会话 ID:{84、255、58、189、125、207、159、166、144、6、19、157、173、113、80、88、204、69、101、231、227、242、144、 59、174、147、158、65、14、78、182、52} 密码套件:TLS_RSA_WITH_AES_128_CBC_SHA256 压缩方式:0 扩展 renegotiation_info、renegotiated_connection: *** 密码套件:TLS_RSA_WITH_AES_128_CBC_SHA256 修剪过的 *** 服务器HelloDone [阅读] MD5 和 SHA1 哈希:len = 4 0000: 0E 00 00 00 .... Thread-0,处理异常:javax.net.ssl.SSLKeyException: RSA premaster secret error %% 无效:[会话 1,TLS_RSA_WITH_AES_128_CBC_SHA256] 12:41:01.684 [Thread-0] 错误 c.p.p.c.i.SslContextTestContainer - 意外异常 javax.net.ssl.SSLKeyException:RSA premaster secret 错误 在 sun.security.ssl.RSAClientKeyExchange.(RSAClientKeyExchange.java:86) ~[na:1.8.0_25] 在 sun.security.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:880) ~[na:1.8.0_25] 在 sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:344) ~[na:1.8.0_25] 在 sun.security.ssl.Handshaker.processLoop(Handshaker.java:936) ~[na:1.8.0_25] 在 sun.security.ssl.Handshaker.process_record(Handshaker.java:871) ~[na:1.8.0_25] 在 sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1043) ~[na:1.8.0_25] 在 sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1343) ~[na:1.8.0_25] 在 sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:728) ~[na:1.8.0_25] 在 sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123) ~[na:1.8.0_25] 在 java.io.OutputStream.write(OutputStream.java:75) ~[na:1.8.0_25] 在 com.polycom.pillars.certificate.internal.SslContextTestContainer$ClientThread.doit(SslContextTestContainer.java:193) ~[bin/:na] 在 com.polycom.pillars.certificate.internal.SslContextTestContainer$SslConnectionThread.run(SslContextTestContainer.java:127) ~[bin/:na] 引起:java.security.NoSuchAlgorithmException:没有这样的算法:SunTls12RsaPremasterSecret for provider SunPKCS11-NSS 在 sun.security.jca.GetInstance.getService(GetInstance.java:101) ~[na:1.8.0_25] 在 javax.crypto.JceSecurity.getInstance(JceSecurity.java:109) ~[na:1.8.0_25] 在 javax.crypto.KeyGenerator.getInstance(KeyGenerator.java:287) ~[na:1.8.0_25] 在 sun.security.ssl.JsseJce.getKeyGenerator(JsseJce.java:274) ~[na:1.8.0_25] 在 sun.security.ssl.RSAClientKeyExchange.(RSAClientKeyExchange.java:77) ~[na:1.8.0_25]

【问题讨论】:

    标签: java ssl jsse nss


    【解决方案1】:

    确实,提供者不支持 TLS1.2。跟踪此问题的错误是: https://bugs.openjdk.java.net/browse/JDK-8029661

    【讨论】:

      【解决方案2】:

      异常即将到来,因为服务器仍然尝试在 TLS1.2 中进行协商,即使它不受提供程序 NSS 的支持。为避免此异常并继续使用 TLS1.1,请在 java.security 下添加以下行。

      jdk.tls.disabledAlgorithms=SSLv3,TLSv1.2

      【讨论】:

        猜你喜欢
        • 2011-08-06
        • 1970-01-01
        • 2020-11-29
        • 1970-01-01
        • 2018-05-04
        • 1970-01-01
        • 1970-01-01
        • 2013-05-23
        • 2013-05-17
        相关资源
        最近更新 更多