[英]Spring security x.509 authentication - accept certificates based on their issuer Certificate Authority
我正在使用Spring Security 使用x.509證書進行身份驗證 ,並且僅當服務器信任庫中存在在瀏覽器密鑰庫中配置的客戶端證書時,它才有效。
目前如何運作:
問題是,如果我從服務器端信任庫中刪除客戶端證書,Firefox將不再打開此彈出窗口,而僅建立單向SSL連接。 即使服務器信任庫中存在根CA證書。
我想要的是:
互聯網上的兩種資源也吸引了我。 在有關Baeldung的本教程中,它說所有客戶端證書都必須存儲在服務器信任庫中,以便X.509身份驗證起作用(這證實了我的經驗)。
您必須記住,對於應該由服務器驗證的每個用戶,都需要在配置的信任庫中安裝其自己的證書。 對於只有幾個客戶端的小型應用程序,這可能是可行的,隨着客戶端數量的增加,這可能會導致用戶進行復雜的密鑰管理。
但是,@ robinhowlett撰寫的 本教程說
客戶端將在其密鑰庫中將其證書提交給服務器,服務器將使用服務器信任庫中的CA證書來驗證客戶端證書的鏈。
這基本上是我想要實現的,但無法實現。
底線:是否有人設法在服務器信任庫中存儲一個或多個根CA證書,並使用這些根CA頒發的客戶端證書通過Spring Security中的X.509相互SSL握手進行身份驗證?
我正在使用Spring Boot 1.5.2.RELEASE(spring-security-web 4.2.2.RELEASE)。 我已經使用Firefox 53測試了我的工作SSL身份驗證。
我發現了我的問題-在服務器啟動時(我是Tomcat),我正在修改信任庫(刪除客戶端證書,僅保留CA證書)。 但是,在初始化JVM時,信任存儲區保留在內存中,並且只能讀取一次( 此ServerFault帖子上的詳細信息)。 因此,Tomcat在運行時不會讀取信任庫更改。
因此答案很簡單:是的,如果信任存儲中僅存在CA證書,則在SSL握手期間,服務器會與瀏覽器進行通信,以獲取由受信任的CA頒發的客戶端證書,然后瀏覽器會提示用戶選擇證書由受信任的CA頒發的證書(如果瀏覽器密鑰庫中存在這樣的證書)。
但是,如果在服務器啟動並運行時將CA動態添加到服務器信任庫中,則不會檢測到它。 只有在服務器重新引導(並且JVM重新初始化)之后,才能識別新的CA。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.