Estou usando o Tomcat (v 7 e v 8 dependendo do projeto) com o Java. Eu quero forçar o Tomcat a usar apenas o TLS 1.2 (mais especificamente, proibir o TLS v1.0 ou v1.1). No desenvolvimento no Eclipse, adicionei -Dhttps.protocols=TLSv1.2
ao arquivo eclipse.ini; e modifiquei o arquivo server.xml com sslEnabledProtocols="TLSv1.2" sslProtocol="TLSv1.2"
. Isso parece ter funcionado, pois quando eu acessei o servidor de desenvolvimento com uma versão antiga do Firefox (v 17esr), recebi esta mensagem no navegador:
Cannot communicate securely with peer: no common encryption algorithm(s). (Error code: ssl_error_no_cypher_overlap)
Isso não é uma boa prática, no entanto. É uma mensagem de erro feia e realmente não diz ao usuário o que está errado ou como consertá-lo. Minha preferência seria identificar no servidor que o navegador está tentando se conectar com uma versão desatualizada do TLS e redirecionar esses usuários para uma página, notificando-os da necessidade de atualizar seu navegador se quiserem usar o site.
Uma maneira é usar o agente do usuário, embora eu considere isso deselegante e não necessariamente preciso - alguns navegadores dão ao usuário o controle sobre qual versão do TLS deve ser habilitada. O navegador pode suportar o TLS v1.2, mas pode ser desativado pelo usuário.
Qual é a melhor prática aqui para Java / Tomcat? Existe uma maneira de fazer isso usando o HttpServletRequest? Eu tenho medo de ter que reativar as versões "antigas" do TLS, permitindo que o usuário se conecte via HTTPS e, em seguida, identifique que o usuário está usando uma versão antiga do TLS e redirecione.
Obrigado