小编San*_*hat的帖子

即使在客户端禁用TLS 1.2之后,在Java 1.8客户端和以FIPS模式运行的Java 1.7 TLS 1.1服务器之间TLS握手也会失败

"Java 1.7 TLS 1.1服务器"和"Java 1.8客户端"之间的SSL/TLS握手在我的环境中失败,服务器端出现以下异常:

java.security.NoSuchAlgorithmException:没有这样的算法:SunTls12MasterSecret for provider SunPKCS11-NSSfips

以下是我的环境中服务器和客户端的详细信息:

服务器:

  • 服务器使用Java 1.7u45,并且正在运行符合FIPS 140的模式,如 http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/FIPS.html中所述.
  • 服务器使用Mozilla网络安全服务(NSS)版本3.14.3作为加密提供程序.
  • 服务器在SLES 11 SP3(SuSE Linux Enterprise Server)操作系统上运行,并使用操作系统提供的以下NSS RPMS:
    • Mozilla的NSS-3.14.3-0.11.11
    • Mozilla的NSS-工具 - 3.14.3-0.11.11
    • Mozilla的NSPR-4.9.6-0.3.1
    • libfreebl3-3.14.3-0.11.11
    • libsoftokn3-3.14.3-0.11.11
  • 需要注意的一点是,NSS版本3.14.3不支持TLS 1.2.
  • 服务器使用Java 1.7u45,因为Java 1.7u51中引入了Java错误"8028192在FIPS模式下使用PKCS11-NSS提供程序".有关详细信息,请参阅http://www.oracle.com/technetwork/java/javase/7u51-relnotes-2085002.html中的 "已知问题"部分"区域:security-libs/javax.net.ssl" .

客户:

题:

  • 由于服务器不支持TLS 1.2,我在客户端禁用了TLS 1.2.
  • 我无法弄清楚为什么握手失败"甚至在客户端禁用TLS 1.2之后".你能帮我解决这个问题吗?

补充意见:

  • 如果使用Java 1.7(任何版本)并且在客户端禁用TLS 1.2,则相同的方案可以正常工作.
  • 如果使用Java 1.7(任何版本)并在客户端启用TLS 1.2,则会在服务器端抛出相同的异常"java.security.NoSuchAlgorithmException:no such algorithm:SunTls12MasterSecret for provider SunPKCS11-NSSfips".
  • 如果在客户端使用Java 1.8(任何版本),即使禁用TLS 1.2,它也会失败.

服务器端SSL调试日志:

  • 似乎首先使用密码TLS_RSA_WITH_AES_128_CBC_SHA在TLS 1.1中启动握手.
  • 在此之后,出于某种原因,使用密码TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256使用TLS 1.2重新启动握手,该密码失败,异常为"java.security.NoSuchAlgorithmException:no …

security ssl nss fips java-8

7
推荐指数
1
解决办法
2万
查看次数

适用于Java的FIPS兼容SSH库

我想在我的Java应用程序中实现SCP(安全复制)功能,以将文件从SSH服务器复制到另一台机器.我的Java应用程序必须符合FIPS,因此它使用SunPKCS11提供程序与底层NSS密钥数据库进行交互.

为了实现SCP功能,我们可以使用以下任何SSH库来实现Java:

  • JSch
  • vngx-jsch
  • Apache MINA SSHD
  • Ganymed SSH-2
  • sshj
  • SSHTools

关于这些SSH库我有以下问题:

  1. 以上任何库都是FIPS认证的吗?
  2. 如果不是FIPS认证,那么算法(密码,密钥交换,MAC等......)是否符合FIPS标准?
  3. Java是否还有其他FIPS认证/兼容的SSH库?

以下链接似乎表明JSch不符合FIPS:

java ssh scp nss fips

5
推荐指数
1
解决办法
925
查看次数

与Java 7相比,运行相同递归代码的相同线程似乎在Java 8中消耗更多堆栈内存

我在"stackoverflow"网站上问一个关于"java堆栈溢出"的问题:)

对于特定输入进行一些递归函数调用的特定线程在Oracle Java 7(64位)中运行良好,配置的堆栈大小为228k(-Xss228k).

但是,为同一输入运行相同递归代码的同一线程会抛出Oracle Java 8(64位)中的java.lang.StackOverflowError,其堆栈大小为228k.如果堆栈大小增加到512k(-Xss512k),它在Java 8中运行良好.

知道为什么会这样吗?与Java 7相比,在Java 8(Hotspot JVM)中是否进行了任何更改,这可能会增加递归函数调用的堆栈内存消耗?如果需要,我可以提供更多细节.

(编辑)注意:相同的递归深度在Java 7中"始终"起作用,但在Java 8中"始终"失败,堆栈大小为228k.

memory stack-overflow recursion jvm-hotspot java-8

3
推荐指数
1
解决办法
251
查看次数

标签 统计

fips ×2

java-8 ×2

nss ×2

java ×1

jvm-hotspot ×1

memory ×1

recursion ×1

scp ×1

security ×1

ssh ×1

ssl ×1

stack-overflow ×1