【发布时间】:2017-10-10 16:09:01
【问题描述】:
我正在研究在 Java 服务器上配置两个证书(一个使用 SHA1 签名,另一个使用 SHA256 签名)的可能性。具体来说,我创建了一个密钥库,在其中导入了两个证书。然后这个密钥库被设置为由我的简单 java 服务器应用程序使用,具有以下 sintax:
System.setProperty("javax.net.ssl.keyStore","key.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "myPassword");
这是我发现的问题。当使用 openSSL 工具列出在我的安全套接字上打开的端口使用的证书时(在服务器运行并侦听连接时运行命令),我可以看到只使用了一个证书,另一个证书被忽略。
问题是:有什么方法可以告诉我的服务器同时使用这两个证书?这是必需的,因为我还有两个应该能够与服务器通信的 java 客户端应用程序。其中一个信任 SHA1 签名证书,另一个信任 SHA2 证书。
谢谢!
【问题讨论】:
-
我不知道,但我非常怀疑。除此之外,强烈建议停止信任 SHA1 证书。如果在 SHA1 中发现冲突的已知能力变为as bad as the situation with MD5,那么您将通过支持使用不安全哈希函数签名的证书将用户数据置于严重风险之中。这意味着你真的应该升级客户端。
-
哪个证书属于服务器的私钥?
-
我的服务器的密钥库包含两个证书,但是当我列出我的套接字端口使用的实际证书时,我可以看到只使用了第一个添加的证书。我什至创建了两种不同类型的证书(一种使用 RSA 算法,另一种使用 DSA)并将我的客户端 A 配置为仅信任 RSA 证书,将我的客户端 B 配置为仅信任 DSA 证书。没有区别,连接服务器 - 客户端不成功。我知道不再推荐使用 SHA1,但此时升级不是一个选项。
标签: java ssl certificate keystore