Experimentação

Experimentação

Tenho servidores Web que executam vários hosts virtuais e gostaria de evitar que bisbilhoteiros informassem qual host virtual um cliente está acessando. Já existe uma extensão TLS para resolver este problema: SNI criptografado. Vejo que o Cloudflare oferece suporte em seus servidores e que o Firefox tem uma configuração para habilitá-lo no cliente. No entanto, não consigo encontrar nenhuma documentação sobre como ativar isso em meus próprios servidores. Como eu faço isso? (Não estou vinculado a nenhuma pilha de servidores específica e aceitarei qualquer configuração/arquitetura funcional que não seja "colocar atrás do Cloudflare".)

Responder1

A indicação de nome de servidor criptografado (ESNI) ainda é um rascunho da Internet, você não o encontrará em nenhuma implementação importante de servidor, pois está sujeito a alterações. Na verdade, a versão preliminar implementada pelo Firefox suportarascunho-ietf-tls-esni-01que é incompatível commais recenteversões preliminares.

Publiquei um status do ecossistema observado em abril de 2019aqui:

Como você pode ver, OpenSSL, usado por Nginx e Apache, não oferece suporte. Você poderia tentar construirCaddiecom uma biblioteca Go crypto/tls corrigida (usandoeste PR de tls-tris), mas pode não funcionar com o tempo.

Experimentação

Paraexperimentaçãoou para fins educacionais, você pode usar esnitool e tris-localserver detls-tris. Supondo que você tenha um conjunto de ferramentas Go apropriado instalado no Linux ou macOS, algo assim deve funcionar:

# Get source code and build stuff
git clone https://github.com/cloudflare/tls-tris -b pwu/esni
cd tls-tris
make build-esnitool
(cd _dev/tris-localserver && ../go.sh build -v -i .)

# Generate ESNI key material, valid for 24 hours (one day)
_dev/esnitool/esnitool -validity=24h -esni-keys-file=esni.pub -esni-private-file=esni.key

Ele criará dois arquivos:

  • esni.pub - um valor que /wFsX6klACQA...AAAA=você deve configurar no DNS. Se desejar configurar ESNI para www.example.com, crie um registro TXT _esni.www.example.comcom esse /wFsX6klACQA<snip>AAAA=valor. Este formato está em conformidade com a especificação draft-ietf-tls-esni-01 compatível com Firefox e Cloudflare. Isso acontecenãouse o rascunho de especificação mais recente.
  • esni.priv – um arquivo de chave privada, específico para a implementação do teste.

O servidor de teste pode ser iniciado da seguinte forma:

_dev/tris-localserver/tris-localserver -esni-keys=esni.pub -esni-private=esni.priv

Entãoconfigure o Firefox para ativar o uso de ESNI, abra about:confige defina network.security.esni.enabledcomo verdadeiro. Você também deve ativar o DNS sobre HTTPS. As instruções do Firefox podem ser encontradas nessa página. Mais detalhes sobre cada preferência também podem ser encontrados aqui:https://bagder.github.io/TRRprefs/

Essas instruções podem funcionar agora, mas serão interrompidas no futuro, pois o Firefox provavelmente será atualizado para suportar versões de rascunho mais recentes. O esnitool acima também codifica o conjunto de cifras permitido (AES128-GCM) e o algoritmo de troca de chaves (X25519). Isso reflete os parâmetros usados ​​pela Cloudflare.

Observação

ESNI implica TLS 1.3, portanto o certificado e seus nomes de host incorporados serão criptografados. Com ESNI habilitado e usando um transporte DNS seguro, como DNS-over-HTTPS (DoH) ou DNS-over-TLS (DoT), o nome do servidor realmente não será visível na conexão, isso pode ser verificado no Wireshark usando um filtro como frame contains "wireshark"ao visitar wireshark.org.

No entanto, se um único IP hospedar apenas alguns domínios, qualquer adversário passivo poderá adivinhar que você está visitando um desses domínios. Uma grande operadora como a Cloudflare tem muito mais domínios onde isso não é um grande problema.

Como a ESNI usa chaves semi-estáticas, o comprometimento da chave privada significa que qualquer bisbilhoteiro pode descriptografar o nome do servidor criptografado. É por isso que as chaves ESNI são frequentemente alternadas e a automação é necessária. Cloudflare tem essas chaves ESNI bem integradas no DNS e o serviço HTTPS é atualizado regularmente.

Para concluir, o ESNI é promissor, mas requer suporte de clientes (navegadores web), servidores DNS através de um transporte seguro (DoH/DoT) e servidores web. Ele ainda está em desenvolvimento e, a menos que você esteja acompanhando de perto seu desenvolvimento, provavelmente não é uma boa ideia configurá-lo para outras coisas além da experimentação.

Responder2

A resposta anterior muito detalhada inspirada na reutilizaçãotls-trispara construir um pequeno proxy reverso esni, que na verdade pode encerrar o TLS 1.3 com ESNI e encaminhar o tráfego simples para o back-end de sua escolha. Isso permite o uso fácil do ESNI sem qualquer modificação do servidor web que você está usando. O código-fonte e instruções detalhadas podem ser encontrados aqui:esni-rev-proxy

informação relacionada