当前位置: 首页 > 知识库问答 >
问题:

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

公羊绪
2023-03-14

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

环境:

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

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

  • 这是否会起作用,因此我应该继续挖掘,以找出我们做错了什么(在这种情况下,我们需要一些指针和想法来完成这项工作),或者

以下是迄今为止收集到的证据:

  1. 尝试使用TLS1.2时发生的错误是java。安全NoSuchAlgorithmException:没有这样的算法:SunTls12RsaPremasterSecret用于提供程序SunPKCS11 NSS。这篇文章中不讨论相同的错误消息,并指出这意味着不支持TLS 1.2

相关的javax。网调试输出如下:

*** 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]

共有2个答案

充星腾
2023-03-14

由于服务器仍在尝试在TLS1.2中进行协商,因此出现了例外情况,即使提供商NSS不支持这种协商。为了避免此异常并继续使用TLS1.1,请在java下添加以下行。安全

jdk.tls.disabled算法

童花蜂
2023-03-14

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

 类似资料:
  • 在Java8上运行的一小部分示例代码中,我试图遵循bc-fips-1.0.2.jar用户指南Legion of the Bouncy Castle Inc. BC-FJA 1.0.2(Bouncy Castle FIPSJavaAPI)用户指南Date: 09/14/19: 注意:对FIPS模式的支持在Java 1.9中似乎已经开始消失,已经确认从Java 11开始它是一个空操作。对于Java 1

  • 问题内容: 有人可以向我解释差异吗? Provisioner-在docker中安装,运行,拉出容器中的一项工作。 提供程序-是运行VM的东西。即VBox运行ubuntu OS映像。 Docker如何成为提供者?它直接运行一些docker镜像吗?如果我在Windows上,必须有一些boot2docker的隐藏用法,对不对?我什么时候使用每个? 问题答案: Docker Provisioner帮助准备

  • 在SaaS应用程序中,我有一些模板用于生成通知电子邮件或某些超文本标记语言页面。到目前为止,我还没有使用thymeleaf,到目前为止所有的模板都是硬编码的,但是我很想改变这一点,这样应用程序的用户就可以自己编辑这些模板。问题是,如果我允许用户自己编辑模板,用户可能会调用任何Java方法,这将完全危及系统安全性。 thymeleaf可以被“沙箱”,或者可以禁用用户编辑模板上下文中危险的所有功能?(

  • 我一直在尝试为我的应用程序实现一个去噪器,我试图使用这个去噪器减少对服务器的请求,最终,我设法实现了去噪器,但是,它似乎只有在我使用调试器调试应用程序时才起作用。 这就是我实现调试器的方式 这是我的可定义运行实例 这是我为按钮设置onClickListener的方式 我还应该注意,该按钮是recycler视图的一部分,在向服务器发出成功请求后,适配器会收到通知,使用如下所示 我在这里面临的主要问题

  • 我有一本书。NET标准库,其中包含所有与SQL相关的代码。它甚至包含一些创建SQL连接的代码。该库需要从应用程序配置文件中读取,以便获取SQL连接字符串。该库正在使用典型的方法。 现在,我在一个图书馆里使用这个图书馆。NET核心ASP。NET Web Api 2应用程序。我已在该应用程序的

  • 我在为Spring Cloud Config服务器定义多个基于svn的配置存储库时遇到了问题。我已经建立了三个配置库。一个用于开发,单位和生产。我已经将默认值设置为development(通过设置spring.cloud.config.server.svn.uri=development repo uri)。但是,每当我向配置服务器的RESTendpoint发出GET请求时,无论我请求哪个概要文件