Vários certificados SSL em um servidor

1

Estamos hospedando dois sites em nosso servidor de produção bastante pequeno, mas dedicado. Ambos os sites exigem autenticação SSL.

Portanto, temos virtualhosts configurados para os dois. Ambos referenciam seus próprios arquivos domain.key, domain.crt e domain.intermediate.crt.

Cada arquivo CSR e certificado de cada site foi configurado usando suas próprias informações exclusivas e nada é compartilhado entre eles (exceto o próprio servidor)

No entanto, qual link simbólico do site (configurado em / etc / apache2 / sites-enabled) é referência primeiro, é o site ao qual o certificado é referenciado, mesmo que estejamos visitando o segundo site.

Por exemplo, suponha que nossas empresas sejam a Cadbury e a Nestlé. Configuramos os dois sites com seus próprios certificados, mas criamos o link simbólico da Cadbury na pasta habilitada para site do apache primeiro e depois na Nestlé.

Você pode visitar a Nestlé perfeitamente, mas se você verificar a instalação do certificado, ela faz referência ao certificado da Cadbury.

Estamos hospedando esses sites em um servidor Ubuntu 12.04.3 LTS dedicado. Ambos os certificados são fornecidos pelo Thawte.com.

Me deparei com algumas soluções em potencial, sem nenhum grau de sucesso. Espero que alguém tenha uma solução decente?

obrigado

Edit: A única outra solução que parece ter fornecido sucesso para algumas pessoas está usando o SNI com Apache. No entanto, as configurações aqui não parecem coincidir com a nossa.

Kyle O'Brien
fonte
Você está 100% correto. Eu editei a pergunta. Eu tentei a opção SNI, mas isso não parecia funcionar.
Kyle O'Brien
Mas, na verdade, eu acho que deve estar aberto a ouvir isso de novo no caso de eu não implementar algo corretamente na primeira vez
Kyle O'Brien
Sem o SNI, você pode ter apenas um certificado por endereço IP, pois o servidor da Web não pode saber em qual site você está GETting até depois da troca de certificados. Então ele usa o primeiro que tem. Você não menciona na sua pergunta quantos IPs você possui.
Paul
@ Paul - sim, parece que há pouca solução aqui. Bem, tecnicamente, temos 5. No momento em que publiquei isso, não tinha tanta certeza de que queríamos usar um deles em um cliente de orçamento bastante baixo. Dito isto, do ponto de vista acadêmico, você parece estar correto. A única maneira é uma boa implementação do SNI. Você poderia reunir uma resposta usando o SNI e as informações da minha pergunta e eu a aceitarei como a correta. Graças
Kyle O'Brien
Esteja avisado, você ainda poderá ver vários clientes se conectando que não suportam SNI. Internet Explorer no Windows XP, por exemplo.
David Schwartz

Respostas:

3

O problema de hospedar vários sites SSL em um único endereço IP é que a troca de certificados SSL ocorre primeiro, antes da instrução GET, que permite ao servidor da Web saber em qual site você está direcionando.

Mesmo que você digite o nome do servidor https://google.com no navegador, o nome é resolvido para o endereço IP e uma sessão SSL é iniciada no endereço IP. O URL específico que estamos segmentando não pode fazer parte de um handshake SSL padrão, caso contrário, isso seria visível para os bisbilhoteiros. Portanto, o servidor da web não pode saber qual certificado usar e, geralmente, usa o primeiro.

O SNI é uma extensão do TLS / SSL que permite que o nome do host seja incluído na negociação da sessão. Atualmente, isso é amplamente suportado em clientes e servidores. Embora isso torne o nome do host visível para os bisbilhoteiros, ele é considerado aceitável porque inclui apenas o nome do host em vez da URL completa (que pode conter informações confidenciais) e você provavelmente fez uma pesquisa DNS não criptografada para o nome do host imediatamente antes de iniciar o Sessão SSL.

No Apache, existem três etapas:

  1. Não use um site padrão no 443
  2. Use as diretivas ServerName na sua definição: host virtual 443
  3. Certifique-se de que o Apache seja construído com um OpenSSL recente

Você receberá uma mensagem nos logs de erro do Apache se não for construído com o suporte SNI:

 You should not use name-based virtual hosts in conjunction with SSL!!

Se tudo estiver bem, você obterá o seguinte nos logs:

 [warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
Paulo
fonte
11
+1 para "se tudo estiver bem"
ruuter 18/04/16