2013-06-06 109 views
0

我有jetty工作與SSL設置,客戶端和服務器證書(X.509)根據需要提供根據春季安全性,直到這一切似乎工作正常並通過日誌進行驗證。X.509:服務器無法從客戶端證書提取用戶信息

Now!問題是,當我訪問一個安全的頁面時,客戶端(Chrome)發送證書並且服務器正在成功接收它,但在此之後它將返回一個空的用戶。有沒有人知道這裏發生了什麼?

我提供什麼我想在這裏的一些信息:

環境

的Windows /碼頭(版本:8.1.11.v20130520)/春季安全(3.2.0)

連接器在碼頭(版本:8.1.11.v20130520)

<connector implementation="org.eclipse.jetty.server.ssl.SslSocketConnector"> 
    <port>9443</port> 
    <keystore>src/test/resources/server.jks</keystore> 
    <needClientAuth>true</needClientAuth> 
    <keyPassword>password</keyPassword> 
    <password>password</password> 
</connector> 

安全配置文件

<sec:x509 subject-principal-regex="CN=(.*?)" 
      user-service-ref="myUserDetailsService" /> 

日誌提取

09:42:24:214 DEBUG org.springframework.security.web.authentication.preauth.x509.SubjectDnX509PrincipalExtractor(SubjectDnX509PrincipalExtractor.java:43 ) - 主題DN是CN =杆,OU =春季安全,O = Spring框架' 09:42:24:218 DEBUG org.springframework.security.web.authentication.preauth.x509.SubjectDnX509PrincipalExtractor(SubjectDnX509PrincipalExtractor.java:58 ) - 提取的主要名稱是''

回答

2

您使用的subject-principal-regex是錯誤的。如果您希望提取的主體爲日誌消息中的DN的rod,請將模式設置爲CN=(.*?),(注意最後的逗號)。順便說一句,我認爲這是默認模式,所以你不妨跳過這個設置。

+0

作品完美的我,感謝。沒有注意到並懷疑正則表達式。 – Kalher

0

元素<security:x509 />用於在Spring安全中啓用X.509身份驗證。

元素<security:x509 />的屬性subject-principal-regex用於提供正則表達式以從客戶端證書中提取用戶名。

正則表達式有助於定製我們想從客戶端證書的對象中提取出哪部分作爲我們的用戶,就像第一個中間或在正則表達式中指定的那樣,並且由於正則表達式無效,我得到空用戶。

更進一步,屬性subject-principal-regex是可選的,如果我們不提供它明確則對應類(SubjectDnX509PrincipalExtractor)constrtuctor爲它提供了以下默認情況下正則表達式"CN=(.*?)(?:,|$)"

相關問題