2013-03-18 5 views
2

Являясь частью веб-приложения Java, я ищу реализацию аутентификации клиента через сертификат браузера. Я смог найти информацию о том, как создавать и устанавливать сертификаты на клиенте и сервере.Аутентификация сертификата подлинника Java-сертификата вручную

С точки зрения доступа, вся информация, которую я могу найти, по-видимому, касается настройки доступа к определенному пути, например. www.mydomain.com/securearea и позволяя серверу обращаться с доступом.

Однако я хочу реализовать пользовательское поведение в зависимости от того, представляет ли пользователь действительный клиентский сертификат или нет, а не защитный блок доступа. По сути, я хочу, чтобы иметь возможность создать метод, как hasValidClientCertificate()

К сожалению, я не могу найти какой-либо ссылки о том, как я могу проверить, если программно клиент имеет действительный сертификат в Java. Я использую Tomcat. Это не моя сильная область, поэтому было бы очень благодарно за любые советы или советы.

Большое спасибо за ваше время

Paul

+0

Вы видели ответ ниже? – Michael

ответ

1

Вы должны выполнить несколько шагов

1) Настройка Tomcat для выполнения проверки подлинности сертификата клиента (в server.xml):

<Connector port="8443" 
protocol="HTTP/1.1" 
SSLEnabled="true"   
maxThreads="150" 
minSpareThreads="25" 
maxSpareThreads="75" 
enableLookups="false" 
disableUploadTimeout="true" 
acceptCount="100" 
keyAlias="tomcat" 
debug="0" 
scheme="https" 
secure="true" 
clientAuth="want" 
sslProtocol="TLS" 
keystoreFile="server.keystore" keystorePass="changeit" 
truststoreFile="trust.keystore" truststorePass="changeit"/> 

Уточнение от http://tomcat.apache.org/tomcat-7.0-doc/config/http.html относительно clientAuth атрибут:

установить на хочу, если вы хотите, чтобы стек SSL запрашивал сертификат клиента, но не сработал, если он не был представлен.

Пожалуйста, обратитесь к аутентификации Tomcat для лучшего объяснения, как настроить Tomcat для SSL: http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html

2) Реализовать свой hasValidClientCertificate(), используя следующий код:

X509Certificate[] crts = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate"); 
if (crts!= null && crts.length > 0) { 
    return true;   
} 

3) Если вам нужно доступ к сертификату пользователя, пожалуйста, обращайтесь к

X509Certificate userCert = crts [0]; 
Смежные вопросы