集成 X.509 認證
1. 前言
X.509 通常用于 SSL 證書,瀏覽器自動檢查服務端的證書是否真實,服務器是否可信。在一些情況下,服務端也會要求瀏覽器的證書,實現雙向認證,在這種情況下,Spring Security 在安全過濾器中獲得用戶信息,并校驗其權限是否滿足。
本節(jié)重點討論 Spring Security 與 X.509 認證的集成。
2. X.509 認證概述
X.509 其實是一種證書的格式規(guī)范,它主要包含了以下信息:
版本號
序列號
簽名算法
頒發(fā)者
證書有效期(開始日期,終止日期)
主題
主題公鑰信息(公鑰算法,主體公鑰)
頒發(fā)者唯一身份信息(可選)
主題唯一身份信息(可選)
擴展信息(可選)
簽名
這個證書經過加密后變成了一種身份標識,用來使通信雙方彼此信任。
我們常見的 SSL 證書就是 X.509 證書的一種表現形式。
SSL 是對 HTTP 通訊協(xié)議進行加密通訊的方法,SSL 和 HTTP 的結合也就是常見的 HTTPS 了。
3. Spring Security 集成
3.1 在 Spring Security 開啟 X.509 客戶端認證
要在 Spring Security 項目中開啟 X.509 認證,只需要在 Http 的配置項中加入 x509,具體寫法如下:
<http>
...
<x509 subject-principal-regex="CN=(.*?)," user-service-ref="userService"/>;
</http>
該對象有兩個可選配置項:
subject-principal-regex
,這是一個正則表達式,用戶來證書中解析出用戶名,其默認值為CN=(.*?),
,解析出的用戶名值將會傳給UserDetailsService
用來獲得用戶權限;user-service-ref
,該對象用來指定UserDetailsService
實例,如果當前上下文只有一個UserDetailsService
實例時,不需要指定此對象。
3.2 在 Tomcat 中配置 SSL
3.2.1 生成 SSL 證書
這里的證書包含服務端證書和客戶端證書。
服務端證書用于配置 Tomcat,使瀏覽器驗證服務器的真實性??蛻舳俗C書需要安裝到用戶瀏覽器中,用來開啟 SSL 客戶端認證。
服務端配置方式如下:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="${catalina.home}/conf/server.jks"
keystoreType="JKS" keystorePass="password"
truststoreFile="${catalina.home}/conf/server.jks"
truststoreType="JKS" truststorePass="password"
/>
即使客戶端瀏覽器不提供證書,clientAuth
也同樣可以置為 true
,此時客戶端如果不提供 X.509 認證平局,則其不會被授權訪問 Spring Security 資源。
4. 小結
本節(jié)主要內容如下:
- X.509 是一種證書格式規(guī)范;
- HTTPS 是 X.509 在 HTTP 安全上的應用;
- Spring Security 支持開啟 Web 客戶端的證書認證集成功能。
至此,關于 Spring Security 的認證部分就結束了,下節(jié)開始,我們討論 Spring Security 的第二大功能「鑒權」。