我正在調查在Java服務器上配置兩個證書(一個使用SHA1簽名,另一個使用SHA256簽名)的可能性。具體來說,我創建了一個我已經導入兩個證書的密鑰庫。此密鑰庫,然後設置要使用我的簡單的Java服務器應用程序具有以下sintax:在Java服務器應用程序上同時配置兩個SSL證書
System.setProperty("javax.net.ssl.keyStore","key.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "myPassword");
這裏是我已經確定問題。當使用openSSL工具列出在我的安全套接字上打開的端口所使用的證書時(在服務器運行並監聽連接時運行該命令),我可以看到只有一個證書被使用,另一個被忽略。
問題是:有什麼辦法可以告訴我的服務器同時使用兩個證書嗎?這是需要的,因爲我也有兩個應該能夠與服務器通信的Java客戶端應用程序。其中之一是信任SHA1簽名證書,另一個信任SHA2證書。
謝謝!
我不知道,但我非常懷疑它。除此之外,強烈建議您停止信任SHA1證書。如果已知的在SHA1中查找衝突的能力變得[與MD5一樣糟糕](https://blogs.technet.microsoft.com/srd/2012/06/06/flame-malware-collision-attack-explained/ ),您將通過支持使用不安全哈希函數簽名的證書來將用戶數據置於嚴重風險之中。這意味着你真的應該升級客戶端。 – TheGreatContini
哪個證書屬於服務器的私鑰? –
我的服務器密鑰庫包含兩個證書,但是當列出由我的套接字端口使用的實際證書時,我可以看到只使用了第一個添加的證書。我甚至創建了兩種不同類型的證書(一種使用RSA算法和另一種DSA),並配置我的客戶端A僅信任RSA證書,而我的客戶端B僅信任DSA證書。它沒有區別,連接服務器客戶端不成功。我知道不再推薦SHA1,但升級目前不是一種選擇。 –