TLS1.2是否使用使用SunPKCS11 NSS提供程序配置的JSSE在FIPS模式下与NSS一起工作



我们正试图让TLS1.2在以下环境中以FIPS模式工作。尝试写入使用SSLContext为协议"TLSv1.2"创建的SSLSocket时失败,返回错误java.security.NoSuchAlgorithmException:没有这样的算法:提供程序SunPKCS11 NSS的SunTls12RsaPremasterSecret

环境:

  • Java:OpenJDK 1.8.0_25-b17(客户端和服务器)
  • OS:COS 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:没有这样的算法:提供程序SunPKCS11 NSS的SunTls12RsaPremasterSecret。本文讨论了一条相同的错误消息,并指出这意味着TLS 1.2不受支持
  2. NSS的FIPS验证最后一次是在2010年,NSS版本3.12.14。直到3.15.1,任何NSS发行说明中都没有提到对TLS1.2的支持。这里发布了一个相关的问题,但没有具体提到TLSv1.2
  3. CentOS 6.5发布说明表明支持FIPS模式和TLS1.2,但没有提及是否同时支持这两种模式
  4. 当系统不处于FIPS模式时,我们使用TLS1.2 SSLContext(客户端和服务器)进行的测试可以工作。在运行modutil–fips true之后运行完全相同的测试会导致下面提供的所述错误和控制台输出

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

***ClientHello,TLSv1.2RandomCookie:GMT:1409235389字节={122104164187130152,6,95250230146,99164228116203188,51481401963587332286715120}会话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_2AES_128 _CBC_SHA,TLS_RSE_DSS_WITH_AES_128%_CBC_SHA、SSL_RSA_WICH_3DES_EDE_CBC_SHA,SSL_EMPTY_RENEGOTIATION_INFO_SCSV]压缩方法:{0}扩展签名算法,签名算法:SHA512带ECDSA,SHA512带RSA,SHA384带ECDSA***修整%%谈判:[第1阶段,TLS_RSA_WITH_AES_128_CBC_SHA256]***ServerHello,TLSv1.2RandomCookie:GMT:14029235389字节={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:{84255、58189125、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扩展重新协商信息,重新协商连接:***密码套件:TLS_RSA_WITH_AES_128_CBC_SHA256修整***服务器HelloDone[读]MD5和SHA1散列:len=40000:0E 00 00 00。。。。线程0,正在处理异常:javax.net.ssl.SSLKeyException:RSA预主密钥错误%%无效:[Session-1,TLS_RSA_WITH_AES_128_CBC_SHA256]12:41:01.684[Thread-0]错误c.p.p.i.slContextTestContainer-意外异常javax.net.ssl.SSLKeyException:RSA预主密钥错误在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.prrocessLoop(Handshaker.java:936)~[na:1.8.0_25]在sun.security.ssl.Handshaker.prrocess_record(Handshaker.java:871)~[na:1.8.0_25]在sun.security.ssl.SSSLSocketImpl.readRecord(SSLSocketImpl.java:1043)~[na:1.8.0_25]在sun.security.ssl.SLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1343)~[na:1.8.0_25]在sun.security.ssl.SSSLSocketImpl.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.bills.certificate.internal.SslContextTestContainer$ClientThread.doit(SslContentTestContainer.java:193)~/bin/:na]网址:com.polycom.bills.certificate.internal.SslContextTestContainer$SslConnectionThread.run(SslContentTestContainer.java:127)~/bin/:na]引起原因:java.security.NoSuchAlgorithmException:没有这样的算法:提供程序SunPKCS11 NSS的SunTls12RsaPremasterSecret在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(JsseJc.java:274)~[na:1.8.0_25]在sun.security.ssl.RSAClientKeyExchange.(RSAClientKeyExchange.java:77)~[na:1.8.0_25]

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

由于服务器仍然试图在TLS1.2中进行协商,即使提供程序NSS不支持它,因此会出现异常。为了避免此异常并继续使用TLS1.1,请在java.security.下添加以下行

jdk.tls.disabledArgithms=SSLv3,TLSv1.2

相关内容

  • 没有找到相关文章

最新更新