3 回答

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
問(wèn)題#1:我可以將多個(gè)證書(shū)(私鑰)存儲(chǔ)在密鑰庫(kù)中,以便稍后加載到我的 FIX 引擎中嗎?
就 Java 而言,您絕對(duì)可以在一個(gè)密鑰庫(kù)文件或其他存儲(chǔ)對(duì)象中擁有多個(gè)私鑰條目,每個(gè)私鑰條目都包含一個(gè)私鑰以及證書(shū)或(通常)鏈。(請(qǐng)注意,如果您使用 PKCS12與其他軟件交換,其他軟件可能不支持一個(gè) PKCS12 中的多個(gè)條目。如果您使用 PKCS12 只是為了提高 Java 中的安全性,或者為了消除 j9+ 中的警告,則不必?fù)?dān)心。)
我不知道您使用的是什么 FIX 引擎,也不知道它如何處理 TLS(以前稱為 SSL)的密鑰和證書(shū)信息(或者實(shí)際上它如何處理 TLS)。如果它只是將密鑰庫(kù)文件(或流)加載為 KeyStore 對(duì)象,則適用上述 Java 功能。如果它做了其他事情,它能做什么取決于其他事情。
問(wèn)題#2:如果問(wèn)題#1 的答案是肯定的,那么當(dāng) SSL 上下文與服務(wù)器建立 SSL 連接時(shí),SSL 上下文將如何在 SSL 握手期間選擇客戶端證書(shū)?
在 TLS 協(xié)議中,當(dāng)服務(wù)器請(qǐng)求客戶端使用證書(shū)時(shí),它會(huì)指定算法約束(1.2 中的葉密鑰算法和/或 1.2 和 1.3 中的鏈簽名算法),并且可以指定所需的證書(shū)頒發(fā)機(jī)構(gòu) (CA) 列表)(可能已頒發(fā)鏈中的任何證書(shū))。
如果您的客戶端(FIX 引擎)使用 TLS (JSSE) 的 Java 標(biāo)準(zhǔn)實(shí)現(xiàn)及其標(biāo)準(zhǔn)(默認(rèn))“SunX509”KeyManager,則會(huì)從密鑰庫(kù)中選擇一個(gè)滿足服務(wù)器上述約束的條目;如果您選擇或配置“NewSunX509”或“PKIX”KeyManager,它還會(huì)檢查為您的 JVM 定義的任何算法約束(例如,自 2017 年左右開(kāi)始,Oracle JVM 禁止使用基于 MD5 或 SHA1 的簽名的證書(shū),或小于 1024 的 RSA 密鑰位),并優(yōu)先考慮證書(shū)未過(guò)期且不具有不適當(dāng)?shù)?KeyUsage 或 ExtendedKeyUsage 擴(kuò)展的條目。在多個(gè)可接受或首選條目中,選擇是任意的——但是密鑰庫(kù)實(shí)現(xiàn)枚舉了它們。大多數(shù)服務(wù)器支持所有標(biāo)準(zhǔn)(可能是且未過(guò)時(shí)的)算法,并且通常無(wú)法以此來(lái)區(qū)分。如果服務(wù)器接受來(lái)自 Digicert、GoDaddy、LetsEncrypt 等“公共”CA 的證書(shū),這些證書(shū)也不太可能不同,但如果它使用特定于該服務(wù)器或其運(yùn)營(yíng)商的 CA(或可能幾個(gè)),則此類 CA 名稱將通常是唯一的,因此只會(huì)為該服務(wù)器選擇密鑰和證書(shū)。
如果您的客戶端使用自定義 KeyManager——無(wú)論是在應(yīng)用程序中顯式使用還是通過(guò)中間件(例如 Apache HttpClient)——它可以執(zhí)行不同的操作。它甚至可以選擇使用服務(wù)器將拒絕的密鑰和證書(shū),盡管這通常被認(rèn)為沒(méi)有用。
如果您的客戶端使用不同的 TLS 實(shí)現(xiàn),則可以使用標(biāo)準(zhǔn) KeyManager 結(jié)構(gòu),可能使用上面的選項(xiàng),或者可以執(zhí)行其他任何操作。

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊
如果您使用 spring 框架,您可以通過(guò)添加來(lái)指定您喜歡選擇的證書(shū)別名
-Dserver.ssl.key-alias=your_preffered_alias

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
您說(shuō)您有一個(gè)連接到 FIX 服務(wù)器的 FIX 引擎,然后詢問(wèn)私鑰是否可以存儲(chǔ)在您的 FIX 引擎的密鑰庫(kù)中。這讓我相信 FIX 引擎位于客戶端應(yīng)用程序中。您不應(yīng)將私鑰公開(kāi)存儲(chǔ)在密鑰庫(kù)中。相反,您應(yīng)該向客戶端提供僅包含證書(shū)的信任庫(kù)。
添加回答
舉報(bào)