복붙노트

[SPRING] 인증서를 X509 필터로 가져 오는 방법 (Spring Security)?

SPRING

인증서를 X509 필터로 가져 오는 방법 (Spring Security)?

인증서의 CN보다 많은 정보를 추출해야합니다. 현재, 나는 단지 표준 UserDetails loadUserByUsername (String arg)을 얻는다. arg는 인증서의 CN이다. X509Certificate 객체를 가져와야합니다. 가능한가?

봄 보안 XML 파일 :

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

해결법

  1. ==============================

    1.당신은 그렇게 할 수 없습니다. HttpServletRequest에서 가져와야합니다.

    당신은 그렇게 할 수 없습니다. HttpServletRequest에서 가져와야합니다.

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

    2.또한 Spring Security의 X509AuthenticationFilter가 인증서를 수락하면 X509AuthenticationFilter가 인증을 받으면 X509Certificate를 다음과 같이 액세스 할 수 있습니다.

    또한 Spring Security의 X509AuthenticationFilter가 인증서를 수락하면 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());
        ...
    
  3. from https://stackoverflow.com/questions/1102721/how-to-get-the-certificate-into-the-x509-filter-spring-security by cc-by-sa and MIT license