Authentication X.509:服务器无法从客户端证书提取用户信息

Authentication X.509:服务器无法从客户端证书提取用户信息,authentication,ssl,spring-security,client-certificates,x509,Authentication,Ssl,Spring Security,Client Certificates,X509,我让jetty使用SSL设置,根据Spring Security的要求提供客户机和服务器证书(X.509),在这之前,它似乎工作正常,并通过日志进行了验证 现在!问题是当我访问一个安全页面时,客户端(Chrome)正在发送一个证书,服务器正在成功地接收它,但之后它将返回一个空用户。有人知道这里发生了什么吗 我提供了一些关于我在这里尝试的信息: 环境 Windows/Jetty(版本:8.1.11.v20130520)/Spring Security(3.2.0) 码头中的连接器(版本:8.1.1

我让jetty使用SSL设置,根据Spring Security的要求提供客户机和服务器证书(X.509),在这之前,它似乎工作正常,并通过日志进行了验证

现在!问题是当我访问一个安全页面时,客户端(Chrome)正在发送一个证书,服务器正在成功地接收它,但之后它将返回一个空用户。有人知道这里发生了什么吗

我提供了一些关于我在这里尝试的信息:

环境

Windows/Jetty(版本:8.1.11.v20130520)/Spring Security(3.2.0)

码头中的连接器(版本:8.1.11.v20130520)


9443
src/test/resources/server.jks
真的
密码
密码
安全配置文件

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

日志提取

09:42:24:214调试org.springframework.security.web.authentication.preauth.x509.subjectDNX509PrincipaleTractor(subjectDNX509PrincipaleTractor.java:43)-Subject DN为'CN=rod,OU=Spring security,O=Spring Framework'
09:42:24:218调试org.springframework.security.web.authentication.preauth.x509.subjectDNX509PrincipaleTractor(subjectDNX509PrincipaleTractor.java:58)-提取的主体名称为“”

您使用的
主体主体regex
是错误的。如果希望日志消息中DN的提取主体为
rod
,请将模式设置为
CN=(.*),
(注意末尾的逗号)。顺便说一句,我认为这是默认模式,因此您最好跳过此设置。

元素
用于在spring security中启用X.509身份验证

元素
的属性
subject-principal regex
用于提供正则表达式以从客户端证书中提取用户名

正则表达式有助于自定义我们作为用户要从客户机证书的对象中提取哪一部分,如第一个中间值或正则表达式中指定的任何内容,因为正则表达式无效,我得到的是空用户


此外,属性
subject principal regex
是可选的,如果我们没有明确提供它,那么相应的类(
SubjectDnX509PrincipalExtractor
)construtuctor为它提供了以下默认的regex
“CN=(*?)(,|$)”

对我来说非常有效,谢谢。没有注意到并怀疑正则表达式。
<sec:x509 subject-principal-regex="CN=(.*?)" 
          user-service-ref="myUserDetailsService" />