我们正试图让TLS1.2在以下环境中以FIPS模式运行。当尝试写入使用SSLContext为协议“TLSv1.2”创建的SSLSocket时,它失败并显示错误 java.security.NoSuchAlgorithmException:没有这样的算法:提供商SunPKCS11-NSS的SunTls12RsaPremasterSecret 。
环境:
我认为答案是否定的,TLS1.2在FIPS模式下不适用于NSS 3.16+。我需要果断地确定:
以下是目前收集的证据:
相关的javax.net.debug输出如下:
*** ClientHello, TLSv1.2 RandomCookie: GMT: 1409235389 bytes = { 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 } Session ID: {} Cipher Suites: [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] Compression Methods: { 0 } Extension signature_algorithms, signature_algorithms: SHA512withECDSA, SHA512withRSA, SHA384withECDSA, SHA384withRSA, SHA256withECDSA, SHA256withRSA, SHA224withECDSA, SHA224withRSA, SHA1withECDSA, SHA1withRSA, SHA1withDSA, MD5withRSA *** TRIMMED %% Negotiating: [Session-1, TLS_RSA_WITH_AES_128_CBC_SHA256] *** ServerHello, TLSv1.2 RandomCookie: GMT: 1409235389 bytes = { 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 } Session 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} Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA256 Compression Method: 0 Extension renegotiation_info, renegotiated_connection: *** Cipher suite: TLS_RSA_WITH_AES_128_CBC_SHA256 TRIMMED *** ServerHelloDone [read] MD5 and SHA1 hashes: len = 4 0000: 0E 00 00 00 .... Thread-0, handling exception: javax.net.ssl.SSLKeyException: RSA premaster secret error %% Invalidated: [Session-1, TLS_RSA_WITH_AES_128_CBC_SHA256] 12:41:01.684 [Thread-0] ERROR c.p.p.c.i.SslContextTestContainer - unexpected Exception javax.net.ssl.SSLKeyException: RSA premaster secret error at sun.security.ssl.RSAClientKeyExchange.(RSAClientKeyExchange.java:86) ~[na:1.8.0_25] at sun.security.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:880) ~[na:1.8.0_25] at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:344) ~[na:1.8.0_25] at sun.security.ssl.Handshaker.processLoop(Handshaker.java:936) ~[na:1.8.0_25] at sun.security.ssl.Handshaker.process_record(Handshaker.java:871) ~[na:1.8.0_25] at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1043) ~[na:1.8.0_25] at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1343) ~[na:1.8.0_25] at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:728) ~[na:1.8.0_25] at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123) ~[na:1.8.0_25] at java.io.OutputStream.write(OutputStream.java:75) ~[na:1.8.0_25] at com.polycom.pillars.certificate.internal.SslContextTestContainer$ClientThread.doit(SslContextTestContainer.java:193) ~[bin/:na] at com.polycom.pillars.certificate.internal.SslContextTestContainer$SslConnectionThread.run(SslContextTestContainer.java:127) ~[bin/:na] Caused by: java.security.NoSuchAlgorithmException: no such algorithm: SunTls12RsaPremasterSecret for provider SunPKCS11-NSS at sun.security.jca.GetInstance.getService(GetInstance.java:101) ~[na:1.8.0_25] at javax.crypto.JceSecurity.getInstance(JceSecurity.java:109) ~[na:1.8.0_25] at javax.crypto.KeyGenerator.getInstance(KeyGenerator.java:287) ~[na:1.8.0_25] at sun.security.ssl.JsseJce.getKeyGenerator(JsseJce.java:274) ~[na:1.8.0_25] at sun.security.ssl.RSAClientKeyExchange.(RSAClientKeyExchange.java:77) ~[na:1.8.0_25]
答案 0 :(得分:3)
确实,提供商不支持TLS1.2。跟踪此问题的错误是: https://bugs.openjdk.java.net/browse/JDK-8029661
答案 1 :(得分:0)
由于服务器仍然尝试在TLS1.2中进行协商,即使提供商NSS不支持,也会出现异常。要避免此异常并继续使用TLS1.1,请在java.security下添加以下行。
jdk.tls.disabledAlgorithms = SSLv3的,TLSv1.2工作