Passando informações do protocolo SSL para back-end via cabeçalho HTTP

13

Depois que a vulnerabilidade do Poodle foi revelada recentemente, nossa equipe decidiu mudar do SSLv3. Porém, antes da remoção completa, eles desejam avisar aos usuários diários que seu navegador usa o SSLv3 reprovado. Então, surgiu a ideia de

  • Detectar o protocolo (SSLv3, TLS1 etc ...) do descarregamento de SSL de front-end (usamos nginx)
  • Passe essas informações (protocolo SSL) via cabeçalho HTTP para o Apache-back-end.

Em seguida, nosso código de back-end processará esse cabeçalho e avisará se o cliente usar SSLv3 .

Eu sei que o nginx tem recurso proxy_set_header. Então este seria simples como

proxy_set_header X-HTTPS-Protocol $something;

Agora, o problema é: obviamente, o nginx conhece o protocolo usado pelo cliente, mas como posso passar essas informações para o back-end via cabeçalho HTTP?

obrigado


Conforme apontado por um segmento semelhante, o Apache redireciona o usuário se ele estiver usando SSLv3 , essa ideia pode se tornar muito, muito ruim.

O motivo é que o handshake TLS ocorre antes do tráfego HTTP ser enviado pelo túnel TLS. No momento em que nosso back-end detecta o protocolo SSL, o cliente pode ter enviado dados privados em sua primeira solicitação. Para soluções permanentes e de longo prazo, devemos considerar desativar o SSLv3.

tpml7
fonte

Respostas:

14

O Nginx usa muitas variáveis ​​que podem ser usadas na configuração. Esta página forneceu a lista completa das variáveis. A variável que mantém o protocolo em uma solicitação HTTPS é ssl_protocol. Citação:

$ssl_protocol

retorna o protocolo de uma conexão SSL estabelecida;

Então sua proxy_set_headerconfiguração seria

proxy_set_header X-HTTPS-Protocol $ssl_protocol;

Outra referência: aqui

masegaloeh
fonte
Ponto e vírgula ausente no final de $ ssl_protocol (não posso alterá-lo, pois serverf * l exige que 6 caracteres sejam alterados).
danger89
@ danger89 done that #
sanmai