我有一種情況,並不確定它是否有可能的解決方案。具有多個SSL證書的Java服務器
我有一個Java服務器,SSL插槽和證書「A」&「B」。我也有兩種類型的客戶 - 一個帶有證書「A」,另一個帶有證書「B」。然而,只有一個證書被加載到服務器端,因此也就是帶有證書的客戶端。 「A」可以連接或只有客戶端與證書。 「B」可以連接。
是否有可能修改Java服務器,以便在來自任何客戶端的連接上,它將確定使用哪個證書(A對B)並使用適當的證書?
P.S:請原諒我的安全無知。
謝謝。
我有一種情況,並不確定它是否有可能的解決方案。具有多個SSL證書的Java服務器
我有一個Java服務器,SSL插槽和證書「A」&「B」。我也有兩種類型的客戶 - 一個帶有證書「A」,另一個帶有證書「B」。然而,只有一個證書被加載到服務器端,因此也就是帶有證書的客戶端。 「A」可以連接或只有客戶端與證書。 「B」可以連接。
是否有可能修改Java服務器,以便在來自任何客戶端的連接上,它將確定使用哪個證書(A對B)並使用適當的證書?
P.S:請原諒我的安全無知。
謝謝。
能夠通過Server Name Indication (SNI) extension在相同的IP地址和端口上使用兩個服務器證書,客戶端和服務器必須支持該證書。
Java在客戶端支持此操作since Java 7。
不幸的是,這在服務器端還不支持。這是planned for Java 8。同時,如果您的服務器需要SNI支持,則可以使用其他服務器來處理SSL/TLS連接,並將純文本連接轉發到您的應用程序。通常,這可以通過HTTP(S)的Apache Httpd(使用反向代理)完成。
另外,它看起來像the HTTPS-SNI-Proxy project可能會更靈活的其他協議(儘管它的名稱中有HTTPS)。我沒有嘗試過,但根據它的自述文件,它會在初始Client Hello中查找SNI擴展,然後將整個SSL/TLS連接(不解密它)轉發到另一臺服務器,具體取決於配置。在你的例子中,你必須在不同的端口(不是你真正想聽的端口)上設置兩個SSLServerSocket
,並根據客戶端請求的SNI擴展將這個工具的連接轉發到任一端口。
您是否在談論Sun/Oracle Glassfish Java服務器? – fvu
它是一個帶有SSL套接字的java應用程序 - 充當服務器。 – MeIr
爲什麼你的客戶也有證書A和B?您是否嘗試使用客戶端證書身份驗證? – Bruno