【问题标题】:How to get the certificate into the X509 filter (Spring Security)?如何将证书放入 X509 过滤器(Spring Security)?
【发布时间】:2018-01-26 22:30:57
【问题描述】:

我需要提取更多信息,而不仅仅是证书的 CN。目前,我只得到标准的 UserDetails loadUserByUsername(String arg) 其中 arg 是证书的 CN。我需要获取 X509Certificate 对象。有可能吗?

关于 Spring Security xml 文件:

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

【问题讨论】:

    标签: spring spring-security x509certificate


    【解决方案1】:

    不,你不能那样做。您需要从 HttpServletRequest 中获取它:

    X509Certificate[] certs = (X509Certificate[])HttpServletRequest.getAttribute("javax.servlet.request.X509Certificate");
    

    【讨论】:

    • 如果您打印出cert[0].toString(),证书是否应该以---- BEGIN CERTIFICATE ---- .... 之类的开头并以---- END CERTIFICATE ----- 结尾?
    【解决方案2】:

    另外值得注意的是,一旦你被Spring Security 的内置X509AuthenticationFilter 授权,因为它已经接受了你的证书,那么你就可以访问X509Certificate

    Object object = SecurityContextHolder.getContext().getAuthentication().getCredentials();
    if (object instanceof X509Certificate)
    {
        X509Certificate x509Certificate = (X509Certificate) object;
        //convert to bouncycastle if you want
        X509CertificateHolder x509CertificateHolder =
            new X509CertificateHolder(x509Certificate.getEncoded());
        ...
    

    【讨论】:

      猜你喜欢
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 2014-09-04
      相关资源
      最近更新 更多