
eu tenho ummuitocaso de uso específico. Quero verificar, usando um Apache, se o navegador de um usuário é capaz de usar CipherSuites modernos.
O Apache é chamado com https e deve tentar estabelecer uma conexão SSL, se isso falhar o Apache deve redirecionar o usuário para um site HTTP substituto, onde ele será informado que seu navegador está desatualizado.
Claro que preciso usar o mod_rewrite, que ainda possui uma variável https que contém on/off, dependendo se o SSL estiver estabelecido. Mas como posso dizer ao Apache para continuar se o handshake SSL inicial falhar?
Responder1
o cliente deve tentar estabelecer uma conexão SSL; se isso falhar, o Apache deve redirecionar o usuário para um site HTTP substituto, onde ele será informado de que seu navegador está desatualizado.
Acho que não é possível, o handshake TLS falharia em um estágio bem antes do estágio em que o cliente e o servidor web podem trocar mensagens do protocolo HTTP.
Em vez de:
- Aceite todas as cifras.
- E ordene-os do forte ao fraco com o
SSLCipherSuite ...
diretiva. - Não permita que o cliente determine a preferência da cifra, mas negocie-a na ordem de preferência que você determinou na etapa 2. com o
SSLHonorCipherOrder on
diretiva. - Quedeveresultará em uma conexão com a cifra mais forte que o cliente suporta. (em teoria, sua quilometragem real pode variar.)
- Se essa cifra estiver abaixo do seu limite, aplique a lógica para mostrar sua mensagem de segurança.
- Proteja o conteúdo que realmente precisa de uma cifra forte comoexplicado no manual
ou seja, algo como:
# be liberal in general
SSLCipherSuite ALL:!aNULL:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL
SSLHonorCipherOrder on
<Location "/strong/area">
# but https://hostname/strong/area/ and below
# requires strong ciphers
SSLCipherSuite HIGH:!aNULL:!MD5
</Location>