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.

Então, temos o virtualhosts configurado para os dois. Ambos fazem referência a seus próprios arquivos domain.key, domain.crt e domain.intermediate.crt.

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

No entanto, o link simbólico de qualquer site (configurado em / etc / apache2 / sites-enabled) é a referência em primeiro lugar, é o site cujo certificado é referenciado, mesmo se estivermos visitando o segundo site.

Por exemplo, suponha que nossas empresas são a Cadbury e a Nestlé. Nós configuramos ambos os 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 Nestle perfeitamente bem, mas se você verificar a instalação do certificado, o certificado da Cadbury é de referência.

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

Me deparei com algumas possíveis soluções sem sucesso. Espero que alguém tenha uma solução decente?

Obrigado

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

    
por Kyle O'Brien 23.10.2013 / 13:45

1 resposta

3

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

Embora você digite o nome do link no seu navegador, o nome é resolvido para o endereço IP e uma sessão SSL é iniciada para o 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, portanto, 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. Isso é amplamente suportado em clientes e servidores nos dias de hoje. Embora isso torne o nome do host visível para bisbilhoteiros, ele é considerado aceitável porque inclui apenas o nome do host em vez do URL completo (que pode conter informações confidenciais) e muito provavelmente você fez uma pesquisa de 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 em 443
  2. Use as diretivas ServerName na sua: 443 definição de host virtual
  3. Certifique-se de que o Apache seja criado com um OpenSSL recente

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

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

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

 [warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
    
por 23.10.2013 / 23:19