Posso restringir o acesso SSL ao Tomcat pelo uso estendido de chave?

2

Gostaria de restringir o acesso SSL a uma instância do Tomcat usando certificados e não depender de nenhuma conta de "usuário".

Eu tenho uma CA que está sendo usada para assinar os certificados, mas se eu configurar o Tomcat para confiar na CA, ela irá confiar em qualquer pessoa assinada por ela, enquanto eu gostaria de ser muito mais restritivo e apenas permitir certificados para os quais eu tenha aprovado esse uso específico (ou seja, para os aplicativos que eu estou executando nesse servidor).

Parece-me que é exatamente para isso que serve a parte Extended Key Usage do X.509, e posso criar certs com esse campo definido para um valor personalizado, mas não consigo descobrir se existe alguma maneira para fazer com que o Tomcat preste atenção a esse campo e permita apenas certos usos. Alguém sabe como fazer isso? Mesmo os ponteiros para o Apache httpd seriam úteis, já que eu poderia colocar o Tomcat atrás de um front end https em um piscar de olhos.

    
por Zac Thompson 03.03.2011 / 05:50

2 respostas

1

Isso não pode ser feito na camada SSL no tomcat com extendedKeyUsage. mod_ssl (a partir do APR) só permite que você faça isso com o SSLRequire, mas como isso não é válido no escopo do servidor, ele será ignorado. Eu não acho que a implementação não-APR apóie isso ou como eu não vi nenhuma evidência para isso.

Na melhor das hipóteses, você pode ver o certificado no seu servlet (assumindo que ele está exposto a você; não sei como fazer isso) e verifique a extensão lá.

No entanto, o que você está tentando fazer não é típico. A maneira usual de fazer isso é criar sua própria raiz de confiança (não confie na raiz de confiança do navegador nem nada) e usá-la para emitir certificados de cliente. Eles precisam ser um certificado de cliente (com clientAuth e, se v3, os EKUs apropriados para isso), mas nada mais deve ser especial. Você é razoável confiar no DN para identificar o usuário.

    
por 22.05.2014 / 22:44
1

Material específico do Apache, já que estou muito mais confortável trabalhando com ele do que com o tomcat diretamente -

O uso do certificado não está exposto na lista de variáveis de ambiente SSL que o Apache torna disponível por padrão. Mas se parece com você pode usar um SSLRequire personalizado como este:

SSLRequire "certUsageSSLClient" in PeerExtList("SECCertUsages")

Eu acredito que os nomes estão certos, mas você pode ter que se aprofundar nos OIDs se os nomes curtos não forem exatamente o que sua implementação ssl espera.

link

    
por 21.03.2011 / 06:21