0

我已经根据 Spring Security 的要求使用 SSL 设置、客户端和服务器证书(X.509)提供了码头,到目前为止,这一切似乎都工作正常并通过日志验证。

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

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

环境

Windows/Jetty(版本:8.1.11.v20130520)/Spring Security(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 调试 org.springframework.security.web.authentication.preauth.x509.SubjectDnX509PrincipalExtractor (SubjectDnX509PrincipalExtractor.java:43) - 主题 DN 是 'CN=rod, OU=Spring Security, O=Spring Framework' 09 :42:24:218 调试 org.springframework.security.web.authentication.preauth.x509.SubjectDnX509PrincipalExtractor (SubjectDnX509PrincipalExtractor.java:58) - 提取的主体名称为“”

4

2 回答 2

2

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

于 2013-06-06T10:19:34.550 回答
0

Element<security:x509 />用于在 Spring Security 中启用 X.509 身份验证。

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

正则表达式有助于自定义作为我们的用户,我们要从客户端证书的对象中提取哪一部分,例如第一个中间或正则表达式中指定的内容,并且由于正则表达式无效,我得到了空用户。

此外,属性subject-principal-regex是可选的,如果我们没有显式提供它,那么相应的类 ( SubjectDnX509PrincipalExtractor) 构造函数会为其提供以下内容,默认为正则表达式"CN=(.*?)(?:,|$)"

于 2013-06-07T12:21:25.680 回答