Criptografar comunicações na rede local

1

Estou desenvolvendo um aplicativo da web que é executado em um servidor local na mesma rede que o cliente - basicamente, em vez de um servidor web central, cada site do cliente terá seu próprio servidor hospedado na rede. O servidor é o CentOS e os clientes serão qualquer navegador da Web.

Eu gostaria de criptografar as comunicações entre o navegador da web e o servidor na rede, para que seja difícil para outras pessoas na rede verem as comunicações entre o cliente e o servidor. No entanto, como o cliente não acessará o servidor por meio de uma URL pública, entendo que não posso usar um certificado SSL assinado, deixando-me aberto a ataques de injeção de certificado SSL.

Eu também não tenho controle sobre a rede em que esses sistemas estão sendo instalados, por isso não posso filtrar de forma confiável o filtro MAC ou a filtragem de faixa IP (embora eles sejam ineficazes de qualquer forma, o que não é uma grande perda).

Minhas perguntas são: 1. Estou entendendo isso corretamente, ou posso usar SSL depois de tudo? Se sim, como? 2. Além de um certificado SSL, quais opções eu tenho? Eu preferiria não recorrer à minha própria criptografia, pois isso teria que ser implementado em JavaScript, o que me deixaria aberto a um invasor apenas reescrevendo o código de criptografia quando ele fosse entregue ao navegador.

Obrigado pela sua ajuda / comentários!

    
por malexdev 02.10.2014 / 01:28

3 respostas

4

However, since the client is not going to be accessing the server via a public URL, my understanding is that I cannot use a signed SSL certificate, leaving me open to SSL certificate injection attacks.

Isso é um absurdo. Não há exigência de que os certificados assinados por CAs confiáveis só devam ser usados em URLs acessíveis publicamente.

Outras opções? IPSec, OpenVPN, etc. Mas honestamente, configurar o SSL com um certificado confiável é provavelmente sua opção mais rápida e simples. Ofereça aos seus clientes a capacidade de fazer upload de sua própria chave / certificado para o servidor e, em seguida, eles podem decidir se desejam usar uma CA privada ou pública.

    
por 02.10.2014 / 02:20
1

Se você tiver algum controle sobre a configuração dos dispositivos clientes, poderá atuar como uma autoridade de certificação, seja usando o comando OpenSSL, Red Hat / Fedora Dogtag PKI ou a função de autoridade de certificação de um servidor de domínio do Active Directory.

Crie uma autoridade de certificação sob o seu controle e peça aos clientes que instalem o certificado da sua CA no repositório de CA confiável de seus clientes ( link para clientes Windows, ou use algo como Puppet ou CFEngine para instalar seu certificado raiz em /etc/ssl/certs/ca-certificates.crt e o banco de dados NSS para Linux).

Ao enviar a solução para seus clientes, forneça um certificado para instalar no servidor da Web dentro de sua solução (forneça instruções, geralmente não muito), com o nome de host completo do servidor em SubjectAlternateName no certificado.

Se precisar de mais detalhes, me avise.

    
por 02.10.2014 / 02:04
1

Além de usar o SSL para acessar sites, você pode usar o 802.1x para fornecer comunicações criptografadas em sua LAN em geral. Fazer isso é um pouco mais complexo do que pode ser explicado em um post, mas geralmente envolve a configuração de um método de autenticação do host na LAN.

O caso de uso típico para essa tecnologia específica é impor que somente hosts sancionados por TI possam ser conectados à rede, mas tem a vantagem adicional (strong) de que tudo na conexão é criptografado.

Aqui está um recurso que fornece uma explicação útil: link

Esteja ciente de que isso geralmente é um grande projeto. Se tudo o que você deseja fazer é criptografar a comunicação e fornecer a autenticação de sua aplicação web interna específica, basta usar o TLS (com um certificado assinado de uma raiz pública, se desejar e você estiver usando um domínio publicamente delegado que você controla internamente, ou com sua própria PKI local, se não).

    
por 02.10.2014 / 03:36