2016-08-18 1 views
0

Мне нужно применить SSL «Взаимная аутентификация» для веб-служб (SOAP) и «Односторонняя аутентификация» для веб-страниц, чтобы избежать наличия сертификатов в браузере. Для информацииg, GUI и SOAP Webservices находятся в одном и том же военном модуле.Включить SSL «взаимная аутентификация» для WebServices и «односторонняя аутентификация» для графического интерфейса?

Я использовал SSL Взаимная проверка подлинности на уровне контейнера Tomcat:

<Connector port="8443" protocol="HTTP/1.1" connectionTimeout="20000" 
SSLEnabled="true" 
scheme="https" 
secure="true" 
clientAuth="true" 
sslProtocol="TLS" 
keystoreFile="D:\certificates\demo-keystore" 
keystorePass="xxxxxxxx" 
truststoreFile="D:\certificates\demo-truststore" 
truststorePass="xxxxxxxx"/> 
  • clientAuth = «истина» означает, что действительная цепочка сертификатов должна быть предоставлена ​​клиентом (как с браузером и веб-службы потребитель) перед принятием соединения. Я знаю, что можно настроить SSL-коннектор, чтобы не требовать цепочку сертификатов от клиента, используя clientAuth = «false», а затем применяя WS-Security на уровне сообщений с помощью перехватчиков WSS4J, но я хочу знать, есть ли другой решение.

Благодарим вас заранее.

ответ

0

основе Tomcat documentation об атрибуте clientAuth:

значение ИСТИНА, если вы хотите, чтобы стек SSL требовать действительный сертификат цепочка от клиента перед принятием соединения. Установите, хотите ли, если вы хотите, чтобы стек SSL запрашивал сертификат клиента, но не должен , если он не представлен. Значение false (которое по умолчанию) не будет требует цепочки сертификатов, если только клиент не запрашивает ресурс , защищенный ограничением безопасности, использующим аутентификацию CLIENT-CERT .

Я установил clientAuth в «ложную» и настроенную аутентификацию CLIENT-CERT в WEB-INF/web.xml. Для этого потребуется сертификат клиента для веб-служб с шаблоном url/ws/*:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>CXFServlet</web-resource-name> 
     <url-pattern>/ws/*</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

<login-config> 
    <auth-method>CLIENT-CERT</auth-method> 
</login-config> 
0

Вы можете использовать APR connector, который имеет различные атрибуты для многих настройки SSL и настроить SSLVerifyClient

<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 --> 
<Connector 
     protocol="org.apache.coyote.http11.Http11AprProtocol" 
     port="8443" maxThreads="200" 
     scheme="https" secure="true" SSLEnabled="true" 
     SSLCertificateFile="/usr/local/ssl/server.crt" 
     SSLCertificateKeyFile="/usr/local/ssl/server.pem" 
     SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"/> 

available options для SSLVerifyClient являются

Попросите клиента для сертификата. По умолчанию используется значение «none», что означает, что у клиента не будет возможности отправить сертификат. Другие допустимые значения включают «необязательный», «требовать» и «необязательныйNoCA».

Если вы сконфигурируете его как необязательный, тогда графический интерфейс не может предоставить сертификат (поскольку они не являются обязательными). Для того, чтобы убедиться, что сертификат клиента был представлен с WebServices, проверить наличие javax.servlet.request.X509Certificate в HttpServletRequest

Смежные вопросы