X.509: сервер не может извлечь информацию о пользователе из сертификата клиента.

У меня есть причал, работающий с настройкой SSL, клиентскими и серверными сертификатами (X.509), предоставленными в соответствии с требованиями Spring Security, и до этого все работает нормально и проверяется журналами.

Теперь! Проблема в том, что когда я обращаюсь к защищенной странице, клиент (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 DEBUG org.springframework.security.web.authentication.preauth.x509.SubjectDnX509PrincipalExtractor (SubjectDnX509PrincipalExtractor.java:43) — DN субъекта: «CN=rod, OU=Spring Security, O=Spring Framework» 09 :42:24:218 DEBUG org.springframework.security.web.authentication.preauth.x509.SubjectDnX509PrincipalExtractor (SubjectDnX509PrincipalExtractor.java:58) — Извлеченное имя участника — ''


person Kalher    schedule 06.06.2013    source источник


Ответы (2)


Используемый вами subject-principal-regex неверен. Если вы хотите, чтобы извлеченный принципал был rod для DN в сообщении журнала, установите шаблон на CN=(.*?), (обратите внимание на запятую в конце). Кстати, я думаю, что это шаблон по умолчанию, поэтому вы можете просто пропустить этот параметр.

person zagyi    schedule 06.06.2013
comment
Отлично работает для меня, спасибо за это. Не заметил и усомнился в регулярном выражении. - person Kalher; 06.06.2013

Элемент <security:x509 /> используется для включения аутентификации X.509 в Spring Security.

Атрибут subject-principal-regex элемента <security:x509 /> используется для предоставления регулярного выражения для извлечения имени пользователя из сертификата клиента.

Регулярное выражение помогает настроить, какую часть мы хотим извлечь из объекта сертификата клиента в качестве нашего пользователя, например, первое среднее или что-то еще, как указано в регулярном выражении, и я получал нулевого пользователя из-за недействительного регулярного выражения.

Кроме того, атрибут subject-principal-regex является необязательным, и если мы не указали его явно, то конструктор соответствующего класса (SubjectDnX509PrincipalExtractor) предоставляет ему следующее регулярное выражение по умолчанию "CN=(.*?)(?:,|$)"

person Kalher    schedule 07.06.2013