Forçar https site inteiro sem redirecionar http para https

14

Houve muitas discussões enquanto eu pesquisava como tornar meu site inteiro https. A maioria das respostas foi redirecionar http para https (arquivo .htaccess), o que não é bom, porque não é bom fazer o mesmo trabalho duas vezes (duas solicitações). Além disso, o "homem do meio" primeiro usa o http, e eu quero que meu site vá diretamente no https. Existe outra maneira de tornar o site inteiro https e como fazer isso? Por exemplo, quando o usuário digita example.com, esse example.com acessa automaticamente https, sem redirecionar de http ou qualquer outra coisa primeiro?

Marko Tamburic
fonte
se você não deseja que as pessoas sejam redirecionadas para https, o que você quer que aconteça?
Michael Hampton
@MichaelHampton Talvez eu esteja fazendo uma pergunta para iniciantes, mas quero praticamente "excluir" o http, e a única coisa que existe é https. Ou, se isso não for possível, eu poderia usar o redirecionamento se for bom o suficiente para segurança. Ouvi dizer que o redirecionamento http-> https não é tão bom porque ainda é http e o tráfego pode ser interceptado durante o redirecionamento.
Marko Tamburic
O redirecionamento permanente HTTP 301 é seu amigo, mas não se esqueça de definir o prazo de validade.
Marcel
Você pode apenas remover http. Mas, então, o usuário recebe apenas uma mensagem de conexão recusada, se não estiver inserindo o https: // Para alguns sites, isso é melhor, porque a segurança é maior. Se houver uma versão http disponível, pode acontecer que os cookies sejam enviados com a primeira solicitação não criptografada. Para coisas como um sistema de correio da empresa, somente https, + treinamento do usuário, tudo bem. Em um site geral, você provavelmente perderá muitos visitantes.
Josef diz Restabelecer Monica
Depois disso, tornou-se possível com o HTTP2, no entanto, ainda não evitará ataques de striping de SSL (descritos nas respostas abaixo).
peterh - Restabelece Monica 20/09/18

Respostas:

20

Não. Você não pode fazer magicamente o navegador do visitante escolher o protocolo certo. Um redirecionamento é a maneira de fazer isso.

Jenny D
fonte
1
Para expandir ainda mais sobre esta resposta, considere o uso de reescrita URL e um código de 301 status como Mark Henderson aponta aqui out: serverfault.com/questions/570288/...
Ryan Ries
22

http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security permite que seu servidor indique que o domínio deve ser acessado apenas via HTTPS. Isso se aplica apenas a solicitações subseqüentes; portanto, haveria um carregamento HTTP inicial, mas solicitações futuras carregariam HTTPS mesmo se alguém digitasse HTTP explicitamente.

O IE ainda não o suporta, mas todas as outras empresas fazem.

ceejayoz
fonte
Ainda não protege contra o primeiro pedido.
Jenny D
3
@ JennyD Eu já disse exatamente isso na minha resposta.
ceejayoz
@JennyD O que você quer dizer com "proteger"? Um MiM não pode fazer nada contra um redirecionamento http -> https, a menos que esteja mexendo com o dns / roteamento local e falsificando todo o seu domínio. Nesse caso, não importa realmente o que você faz, pois seus servidores nunca estão sendo acessados.
Red Alert
2
@ JennyD Bem, o HSTS é realmente uma solução melhor do que o seu post, que diz "um redirecionamento é o caminho para fazê-lo". Um redirecionamento pode ser MITMed a qualquer momento. Um redirecionamento com HSTS só pode ser MITMed uma vez por ano por usuário + navegador (ou qualquer que seja o tempo de expiração no cabeçalho) - todas as outras vezes não é solicitado.
ceejayoz
1
@MarkoTamburic Não há razão para não combinar os dois.
precisa
7

Como já foi dito, você não pode forçar os usuários a escolher o protocolo certo. Mas quando o usuário tenta usar HTTP, o que você deve fazer? Um redirecionamento também é insuficiente, porque um invasor sentado entre você e o cliente pode interceptar o redirecionamento, para que o cliente nunca o veja. O cliente continuará enviando HTTP simples e o invasor removerá a camada SSL do servidor ( ataque de remoção de SSL ).

A única maneira certa de evitar isso é não servir HTTP . Não responda na porta 80, exceto talvez para servir uma página de texto sem formatação direcionando o usuário a tentar novamente com HTTPS (mas não fornecendo um link, que o invasor possa manipular). Isso forçará o usuário a digitar https://no navegador, para iniciar a conexão com SSL e impedir o ataque do MITM.

Andrew Schulman
fonte
3
É uma troca, no entanto, como a maioria dos usuários não digita https://. Em vez disso, eles dirão "huh, o site está quebrado" e vão embora. Na melhor das hipóteses, pode haver uma www.example.comresposta ao HTTP e HTTPS, mas ter o próprio aplicativo sendo executado em algo como admin.example.comapenas com HTTPS.
ceejayoz
Acordado. Na prática, quase ninguém faz isso.
Andrew Schulman
Eu realmente não vejo como isso seria mais à prova de MiM. Se o homem no meio puder modificar seu hiperlink para apontar para outro lugar, significa que ele está no controle dos pacotes recebidos do usuário. Ele pode facilmente redirecionar para o site ou adicionar qualquer hiperlink que ele quiser, independentemente da aparência do site.
Red Alert
Mas não, em teoria, se o cliente iniciar a conexão com SSL.
Andrew Schulman
3
isso é verdade - mas se o cliente iniciar com SSL, o OP não terá problema. O problema dele é quando eles iniciam sem SSL, e não há como obtê-los com segurança se houver um MiM sabotando isso ativamente.
Red Alert
1

O ceejayoz tem a melhor resposta para evitar o ataque especificamente mencionado aqui, mas também quero destacar o que muitas pessoas estão perdendo aqui, o que é basicamente porque o HTTP já descobriu a outra parte. Você deseja fazer um redirecionamento 301 permanente. Isso informa ao cliente para fazer novas solicitações para o novo endereço. Então, sim, se alguém digitar o URL errado, ele fará 2 solicitações, MAS, no futuro, um bom cliente deve detectar solicitações para essa URL e fazer a solicitação correta para evitar mais solicitações desperdiçadas. O problema é que isso é apenas para esse URL exato. O HSTS aprimora esse esquema dizendo também 'pelos próximos n segundos também não permite conexões não seguras desse domínio'.

Os usuários não devem visitar sites confidenciais em locais não seguros. Eles não devem se inscrever especialmente em locais inseguros. Estes são princípios básicos de segurança do usuário que devem ser ensinados da mesma forma: 'não abra anexos de fontes não confiáveis'. Qual é realmente a melhor resposta para impedir ataques MiM em sites que nunca foram visitados.

Como observação lateral, alguns navegadores aprimoram isso dizendo também que certos sites conhecidos sempre usam HSTS. Infelizmente, você não pode simplesmente se adicionar a esta lista facilmente.

Leituras adicionais: http://coderrr.wordpress.com/2010/12/27/canonical-redirect-pitfalls-with-http-strict-transport-security-and-some-solutions/

http://dev.chromium.org/sts

krowe
fonte