【问题标题】:X.509 : Server not able to extract user information from client certificateX.509:服务器无法从客户端证书中提取用户信息
【发布时间】:2013-06-06 09:59:49
【问题描述】:

我已经根据 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框架' 09:42:24:218 DEBUG org.springframework.security.web.authentication.preauth.x509.SubjectDnX509PrincipalExtractor (SubjectDnX509PrincipalExtractor.java:58) - 提取的主体名称是''

【问题讨论】:

    标签: authentication ssl spring-security client-certificates x509


    【解决方案1】:

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

    【讨论】:

    • 非常适合我,谢谢。没有注意到并怀疑正则表达式。
    【解决方案2】:

    元素 &lt;security:x509 /&gt; 用于在 Spring Security 中启用 X.509 身份验证。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 2011-10-25
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 2023-03-08
      相关资源
      最近更新 更多