【问题标题】:Cannot retrieve the principal from the client x509 certificate无法从客户端 x509 证书中检索主体
【发布时间】:2013-11-06 13:38:10
【问题描述】:

我在我的 Web 应用程序中使用 Spring 安全性并使用 x509 证书进行身份验证。

<x509 subject-principal-regex="CN=[^,]* ([^,]*),.*$" user-service- ref="MyAuthService"  />

一切正常,我可以检索我的主体并在我的 Java 类中获取它。 当环境发生基础架构级别的更改(服务器迁移和安全更改等)时,我的麻烦就开始了。我不再能够检索此信息。 我想做的是调试我从 x509 证书中获得的标头/主题,以查看是否需要更改正则表达式来检索主体。 但我不知道如何在春季安全中做到这一点。我怎么说从应用程序级别的 x509 证书中记录完整的标题/主题。我正在使用 Spring Security 3.1

【问题讨论】:

  • 就我个人而言,我很想与基础设施/安全团队谈谈,并要求他们正确地整理出他们的标准。 ;)

标签: java spring ssl spring-security x509


【解决方案1】:

如果您希望在处理证书时查看更多详细信息,值得注意的是,实现这些过滤器的 Spring 代码确实实现了调试日志记录。例如,X509AuthenticationFilter 在 X509Certificate 对象上记录 toString() 的结果:

logger.debug("X.509 client authentication certificate:" + certs[0]);

同样,SubjectDnX509PrincipalExtractor 记录它从证书中提取的 subjectDN 和它已确定的用户名。

鉴于这种情况,如果您使用的是 Log4J,则可以通过将以下内容放入您的 log4j.xml 配置文件中来在您的日志文件中获取这些内容。

<logger name="org.springframework.security.web.authentication.preauth.x509">
    <level value="debug" />
</logger>

其他日志框架将具有类似的机制来启用特定类或包的调试日志。

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    相关资源
    最近更新 更多