为什么Java运行时在SSL信任存储如何工作方面存在很大差异?我们如何处理它?

时间:2015-09-03 10:00:59

标签: java ssl jvm truststore

我们碰巧运行一个REST API Web服务,它公开了http://和https://端点。 https://端点后面有一个SSL证书,需要偶尔更新一次。每隔一次我们更新SSL证书一些运行Java程序的用户与我们的服务投诉接口,他的程序不再有效,他必须在Java证书信任库中更改某些内容。我们的用户使用任何东西开发的程序 - PHP,C#,Ruby,以及其他任何东西 - 当我们更改证书时,他们都没有抱怨,但是有些Java用户每隔一段时间就会遇到问题。

Java运行时在这方面有何特殊之处?我们应该怎样做才能改善用户体验?

1 个答案:

答案 0 :(得分:2)

  

我们的用户使用任何东西开发的程序 - PHP,C#,Ruby,以及其他任何东西 - 当我们更改证书时,他们都没有抱怨,但是有些Java用户每隔一段时间就会遇到问题。

  • PHP:直到最近,PHP根本没有默认验证证书。这只是changed with PHP 5.6。如果它验证它在UNIX上使用通常需要CA的系统CA存储。因此,可能是您的PHP客户端根本不验证证书,因此没有问题。
  • C# - 使用通常具有所需CA的系统CA存储
  • Ruby:使用系统CA商店
  • Perl:根本不验证,使用系统CA存储或使用mozilla中的CA存储,具体取决于模块的版本和您使用的分发。

Java提供了自己的CA存储,其中包含的CA通常随系统一起提供。它还取决于Java版本。因此,您使用的根CA可能不是客户端使用的Java版本所知。此外,较旧的Java版本不执行SNI。他们遇到弱DH密钥的问题,不支持更大的RSA密钥等。由于有许多旧的和不支持的Java安装,所以选择了影响你的应用程序的问题。