Вопрос по spring-security, x509certificate, spring – Как получить сертификат в фильтр X509 (Spring Security)?

1

Мне нужно извлечь больше информации, чем просто CN сертификата. В настоящее время я получаю только стандартное UserDetails loadUserByUsername (String arg), где arg - это CN сертификата. Мне нужно получить объект X509Certificate. Является ли это возможным?

в весеннем файле безопасности xml:

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

Ваш Ответ

2   ответа
3

вы не можете получить это таким образом. Вам нужно получить его из HttpServletRequest:

X509Certificate[] certs = (X509Certificate[])HttpServletRequest.getAttribute("javax.servlet.request.X509Certificate");
Если вы распечатываетеcert[0].toString(), если сертификат начинается с чего-то вроде---- BEGIN CERTIFICATE ---- .... и заканчивается---- END CERTIFICATE -----?
0

X509AuthenticationFilter изSpring Security поскольку он принял ваш сертификат, вы можете получить доступ к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());
    ...

Похожие вопросы