Como as aplicações web no Apache Tomcat podem usar autenticação de certificado de cliente SSL / TLS como clientes?

3

Estou usando o aplicativo da Web do Apache Tomcat como um cliente (java) para um serviço da Web hospedado no IIS. Eu preciso usar SSL com autenticação de cliente. Que tipo de critério de correspondência é usado pelo cliente para enviar um certificado de cliente ao Servidor como parte do CertificateRequest, que faz parte do ServerHello.

Instalei o certificado de cliente no IE e acesse o WSDL, em seguida, ele solicita o certificado de cliente e escolho o que instalei e funciona.

Eu posso enviar o depuração do ssl de depuração, se necessário.

    
por AG_SSL 12.01.2012 / 20:11

1 resposta

3

Por fim, o certificado será enviado usando o mecanismo no X509KeyManager usado no SSLContext usado pelo SSLSocket / SSLEngine usado pelo cliente.

O SSLContext padrão inicializa seu gerenciador de chaves usando as propriedades do sistema javax.net.ssl.keyStore* . (Veja esta resposta SO para a diferença entre "keystore" e "trust store": ambos usam a API "keystore" / formato de armazenamento.)

O mais simples é configurar a JVM executando o Tomcat, dentro do qual seu cliente / webapp está em execução, com essas javax.net.ssl.keyStore* properties. O padrão SSLContext vai buscá-lo e é usado por padrão para conexões HTTPS (até mesmo bibliotecas HTTPS de terceiros tendem a usá-lo).

Se você precisar de algo mais específico para solicitações específicas, talvez seja necessário alterar o código da webapp para usar um keystore específico (ou pelo menos escolher um certificado específico) em um determinado SSLContext para essa solicitação.

Como você configura a JVM que está executando o Tomcat dependerá do script de inicialização. Se no Windows, esta pergunta deve ajudar caso contrário, eu suspeito que há uma linha em algum lugar em catalina.sh onde você poderia definir as propriedades do sistema.

Se você configurar o global javax.net.ssl.keyStore* para isso, isso afetará a VM inteira, incluindo os conectores. Para evitar que seus conectores Tomcat usem esse keystore, certifique-se de que a configuração <Connector /> especifique seus próprios atributos keyStore* (para não usar os valores das propriedades do sistema).

Se houver vários certificados (com chave privada) em seu keystore, a escolha deve ser feita automaticamente de acordo com a lista de CAs enviada pelo servidor dentro de sua mensagem CertificateRequest . Por padrão, o gerenciador de chaves selecionará o primeiro certificado encontrado no keystore configurado que é emitido por uma CA nessa lista (ou CA intermediária). Se você precisar de algo mais específico (em particular, se houver vários candidatos válidos em seu keystore), você precisará implementar seu próprio X509KeyManager , coloque a lógica em chooseClientAlias , inicialize um SSLContext com ele e faça qualquer API que faça com que esses pedidos o usem.

    
por 12.01.2012 / 20:37

Tags