Привет всем, я пытаюсь использовать простой SSL между моим веб-сервисом и клиентским приложением. Они оба работают в GlassFish 2.1.1 и находятся в отдельных доменах. Клиентское приложение само по себе является веб-приложением, и я должен добавить параметр JVM -Dcom.sun.enterprise.security.httpsOutboundKeyAlias = s1as, чтобы заставить его отправлять свой сертификат веб-службам.
Я сделал импорт сертификатов в доверенные хранилища друг друга, и все это работает. Проблема в том, что мне нужно сделать некоторые вещи с сертификатом клиента в веб-службе, но вызов метода getUserPrincipal WebServiceContext, который я объявил ранее, всегда возвращает ANONYMOUS.
Почему он это делает и как я могу получить обратно то, что в сертификате.
редактирование:
Думаю, я должен упомянуть, что я создал CA и создал новые закрытые ключи и сертификаты, которые были подписаны CA как для WS, так и для Клиента. Я добавляю закрытые ключи в их хранилища ключей, используя то же имя по умолчанию S1AS и новые подписанные сертификаты, а также сертификат CA в их хранилища доверия.
Я защищаю WS с помощью следующего правила в web.xml:
<security-constraint>
<display-name>Constraint1</display-name>
<web-resource-collection>
<web-resource-name>Customer</web-resource-name>
<description/>
<url-pattern>/basecustomer*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>WSClient</role-name>
</auth-constraint>
<user-data-constraint>
<description/>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>CLIENT-CERT</auth-method>
<realm-name>certificate</realm-name>
</login-config>
<security-role>
<description/>
<role-name>WSClient</role-name>
</security-role>
И следующее в моем sun-web.xml:
<security-role-mapping>
<role-name>WSClient</role-name>
<group-name>WSClient</group-name>
</security-role-mapping>
И, наконец, в GlassFish под Конфигурацией -> Безопасность -> Области -> сертификат, который я сказал, чтобы назначить группу: WSClient