2013-07-29 72 views
0

我有一種情況,並不確定它是否有可能的解決方案。具有多個SSL證書的Java服務器

我有一個Java服務器,SSL插槽和證書「A」&「B」。我也有兩種類型的客戶 - 一個帶有證書「A」,另一個帶有證書「B」。然而,只有一個證書被加載到服務器端,因此也就是帶有證書的客戶端。 「A」可以連接或只有客戶端與證書。 「B」可以連接。

是否有可能修改Java服務器,以便在來自任何客戶端的連接上,它將確定使用哪個證書(A對B)並使用適當的證書?

P.S:請原諒我的安全無知。

謝謝。

+0

您是否在談論Sun/Oracle Glassfish Java服務器? – fvu

+0

它是一個帶有SSL套接字的java應用程序 - 充當服務器。 – MeIr

+0

爲什麼你的客戶也有證書A和B?您是否嘗試使用客戶端證書身份驗證? – Bruno

回答

1

能夠通過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擴展將這個工具的連接轉發到任一端口。

+0

目前我們正在做直接的安全套接字連接。是否有SNI代理類型的交易? – MeIr

+0

我還假設這兩個證書是爲不同的主機名(否則SNI不會幫助)。 – Bruno

+0

我明白了,謝謝! – MeIr

相關問題