Todos os URLs são criptografados ao usar a criptografia TLS / SSL (HTTPS)? Gostaria de saber porque quero que todos os dados de URL sejam ocultados ao usar TLS / SSL (HTTPS).
Se o TLS / SSL fornecer criptografia total de URL, não preciso me preocupar em esconder informações confidenciais dos URLs.
ssl
https
httprequest
Daniel Kivatinos
fonte
fonte
https://somewhere_i_trust/ways_to_protest_against_the_government/
. Em seguida, o URL contém dados confidenciais, ou seja, a sugestão que estou pensando em protestar contra meu governo.Respostas:
Sim, a conexão SSL está entre a camada TCP e a camada HTTP. O cliente e o servidor primeiro estabelecem uma conexão TCP criptografada segura (por meio do protocolo SSL / TLS) e, em seguida, o cliente envia a solicitação HTTP (GET, POST, DELETE ...) através dessa conexão TCP criptografada.
fonte
Como ninguém forneceu uma captura por fio, aqui está uma.
O nome do servidor (a parte do domínio da URL) é apresentado no
ClientHello
pacote, em texto sem formatação .A seguir, é exibida uma solicitação do navegador para:
https://i.stack.imgur.com/path/?some=parameters&go=here
Consulte esta resposta para obter mais informações sobre os campos de versão do TLS (existem três deles - não versões, campos que contêm um número de versão!)
Em https://www.ietf.org/rfc/rfc3546.txt :
Em resumo:
O FQDN (parte do domínio da URL) PODE ser transmitido de forma clara dentro do
ClientHello
pacote se a extensão SNI for usadaO restante da URL (
/path/?some=parameters&go=here
) não tem negócios,ClientHello
pois a URL de solicitação é uma coisa HTTP (OSI Layer 7); portanto, nunca será exibida em um handshake TLS (Layer 4 ou 5). Isso virá posteriormente em umaGET /path/?some=parameters&go=here HTTP/1.1
solicitação HTTP, APÓS o canal TLS seguro ser estabelecido.SUMÁRIO EXECUTIVO
O nome de domínio PODE ser transmitido de forma clara (se a extensão SNI for usada no handshake TLS), mas o URL (caminho e parâmetros) é sempre criptografado.
ATUALIZAÇÃO DE MARÇO DE 2019
Obrigado carlin.scott por trazer este aqui.
A carga útil na extensão SNI agora pode ser criptografada por meio desta proposta preliminar de RFC . Esse recurso existe apenas no TLS 1.3 (como uma opção e cabe aos dois lados implementá-lo) e não há compatibilidade com o TLS 1.2 e versões anteriores.
O CloudFlare está fazendo isso e você pode ler mais sobre os internos aqui - Se o frango deve vir antes do ovo, onde você coloca o frango?
Na prática, isso significa que, em vez de transmitir o FQDN em texto sem formatação (como mostra a captura do Wireshark), ele agora está criptografado.
NOTA: Isso aborda o aspecto de privacidade mais do que o de segurança, uma vez que uma pesquisa reversa no DNS PODE revelar o host de destino desejado.
fonte
Como as outras respostas já apontaram, os "URLs" https são realmente criptografados. No entanto, sua solicitação / resposta de DNS ao resolver o nome de domínio provavelmente não é e, é claro, se você estiver usando um navegador, seus URLs também poderão ser registrados.
fonte
Solicitação e resposta inteiras são criptografadas, incluindo URL.
Observe que quando você usa um proxy HTTP, ele conhece o endereço (domínio) do servidor de destino, mas não conhece o caminho solicitado nesse servidor (ou seja, solicitação e resposta são sempre criptografadas).
fonte
Eu concordo com as respostas anteriores:
Para ser explícito:
Com o TLS, a primeira parte do URL ( https://www.example.com/ ) ainda é visível à medida que cria a conexão. A segunda parte (/ herearemygetparameters / 1/2/3/4) é protegida por TLS.
No entanto, existem várias razões pelas quais você não deve colocar parâmetros na solicitação GET.
Primeiro, como já mencionado por outros: - vazamento na barra de endereços do navegador - vazamento no histórico
Além disso, há vazamento de URL através do referenciador http: o usuário vê o site A no TLS e clica em um link para o site B. Se os dois sites estiverem no TLS, a solicitação para o site B conterá o URL completo do site A em o parâmetro referenciador da solicitação. E o administrador do site B pode recuperá-lo dos arquivos de log do servidor B.)
fonte
Além da resposta útil de Marc Novakowski - o URL é armazenado nos logs do servidor (por exemplo, em / etc / httpd / logs / ssl_access_log), portanto, se você não deseja que o servidor mantenha as informações por mais tempo termo, não o coloque no URL.
fonte
Sim e não.
A parte do endereço do servidor NÃO é criptografada, pois é usada para configurar a conexão.
Isso pode mudar no futuro com SNI e DNS criptografados, mas a partir de 2018 ambas as tecnologias não estarão mais em uso.
O caminho, a string de consulta etc. são criptografados.
Nota para solicitações GET, o usuário ainda poderá recortar e colar o URL na barra de localização, e você provavelmente não desejará inserir informações confidenciais que possam ser vistas por qualquer pessoa que esteja olhando para a tela.
fonte
Um terceiro que está monitorando o tráfego também pode determinar a página visitada examinando seu tráfego e comparando-o com o tráfego que outro usuário possui ao visitar o site. Por exemplo, se houvesse duas páginas apenas em um site, uma muito maior que a outra, a comparação do tamanho da transferência de dados diria qual página você visitou. Há maneiras de ocultar esses terceiros, mas eles não são um comportamento normal do servidor ou do navegador. Veja, por exemplo, este artigo do SciRate, https://scirate.com/arxiv/1403.0297 .
Em geral, outras respostas estão corretas, na prática, embora este artigo mostre que as páginas visitadas (por exemplo, URL) podem ser determinadas com bastante eficácia.
fonte
Você nem sempre pode contar com a privacidade do URL completo. Por exemplo, como às vezes é o caso nas redes corporativas, os dispositivos fornecidos, como o PC da sua empresa, são configurados com um certificado raiz "confiável" extra, para que o seu navegador possa confiar silenciosamente em uma inspeção proxy (intermediária) do tráfego https . Isso significa que o URL completo é exposto para inspeção. Isso geralmente é salvo em um log.
Além disso, suas senhas também são expostas e provavelmente registradas, e esse é outro motivo para usar senhas únicas ou alterar suas senhas com freqüência.
Por fim, o conteúdo da solicitação e resposta também é exposto se não for criptografado.
Um exemplo da configuração da inspeção é descrito pelo ponto de verificação aqui . Um "internet café" antigo, usando os PCs fornecidos, também pode ser configurado dessa maneira.
fonte
Link para a minha resposta em uma pergunta duplicada . Não apenas a URL está disponível no histórico dos navegadores, os logs do lado do servidor, mas também é enviado como o cabeçalho HTTP Referer que, se você usar conteúdo de terceiros, expõe a URL a fontes fora do seu controle.
fonte
Agora é 2019 e o TLS v1.3 foi lançado. De acordo com o Cloudflare, o SNI pode ser criptografado graças ao TLS v1.3. Então, eu me disse ótimo! vamos ver como fica dentro dos pacotes TCP do cloudflare.com Então, peguei um pacote de handshake "client hello" em uma resposta do servidor cloudflare usando o Google Chrome como navegador e wireshark como sniffer de pacotes. Ainda consigo ler o nome do servidor em texto sem formatação no pacote Olá do cliente.
Portanto, cuidado com o que você pode ler, porque ainda não é uma conexão anônima. Um middleware entre o cliente e o servidor pode registrar todos os domínios solicitados por um cliente.
Portanto, parece que a criptografia do SNI exige implementações adicionais para trabalhar com o TLSv1.3
O artigo a seguir descreve a criptografia do SNI fornecido pelo Cloudflare como parte do TLSv1.3. No entanto, todos os URLs HTTP de cloudflare.com estão em texto sem formatação no pacote TCP sob TLS v1.3
[ https://blog.cloudflare.com/encrypted-sni/[[3]
fonte
network.security.esni.enabled
, definanetwork.trr.mode
2 (que atualmente define seu resolvedor de DoH como CloudFlare) e reinicie o navegador (sic!); depois, ele usará o ESNI - onde é suportado pela infraestrutura do domínio. Consulte blog.mozilla.org/security/2018/10/18/… para obter detalhes.Embora já existam boas respostas aqui, a maioria delas está focada na navegação do navegador. Estou escrevendo isso em 2018 e provavelmente alguém quer saber sobre a segurança de aplicativos móveis.
Para aplicativos móveis , se você controlar as duas extremidades do aplicativo (servidor e aplicativo), desde que você use HTTPS, estará seguro . O iOS ou Android verificará o certificado e mitigará possíveis ataques MiM (esse seria o único ponto fraco disso tudo). Você pode enviar dados confidenciais por meio de conexões HTTPS que serão criptografadas durante o transporte . Apenas seu aplicativo e o servidor conhecerão todos os parâmetros enviados por https.
O único "talvez" aqui seria se o cliente ou servidor estivesse infectado com software malicioso que pode ver os dados antes de serem agrupados em https. Mas se alguém estiver infectado com esse tipo de software, ele terá acesso aos dados, não importa o que você use para transportá-los.
fonte
Além disso, se você estiver criando uma API do ReSTful, os problemas de vazamento do navegador e de referenciador http são mitigados, pois o cliente pode não ser um navegador e você pode não ter pessoas clicando em links.
Se for esse o caso, recomendo o login no oAuth2 para obter um token de portador. Nesse caso, os únicos dados confidenciais seriam as credenciais iniciais ... que provavelmente deveriam estar em uma solicitação posterior de qualquer maneira
fonte
Embora você já tenha respostas muito boas, eu realmente gosto da explicação neste site: https://https.cio.gov/faq/#what-information-does-https-protect
em resumo: usando HTTPS oculta:
fonte