Vários domínios com SSL no mesmo IP

Respostas:

28

Eu acho que é uma boa idéia como explicar qual é realmente o problema com hosts virtuais e SSL / TLS.

Quando você se conecta a um servidor apache por HTTP, envia um conjunto de cabeçalhos http. Eles se parecem com isso:

GET /index.html HTTP/1.1
 Host: www.nice-puppies.com

Se você possui hospedagem virtual, o apache examinará o campo hosts, em seguida, busque o index.html correto para você. O problema é quando você adiciona SSL / TLS. O servidor configura a criptografia antes de você enviar sua solicitação http. Portanto, o servidor não sabe se você está acessando www.nice-puppies.com ou www.evil-haxxor.com até que a autenticação / criptografia seja concluída. O servidor não consegue adivinhar (como o envio do certificado errado gera uma mensagem de erro desagradável).

Uma solução é um certificado curinga (como mencionado acima), válido para * .nice-puppies.com. Dessa forma, você pode usar o mesmo certificado para vários domínios, mas não pode ter um certificado * .com (ok, pode, mas seria muito ruim para todos os outros); portanto, em geral, você precisará de um IP separado para cada Domínio HTTPS.

pehrs
fonte
4
Boa explicação, mas você poderia ter um cert UC que permitirá que vários domínios em uma cert
Sam Cogan
1
Sim, você pode ter certificados de comunicação unificada (certificados UCC / UC). Eu provavelmente deveria ter mencionado eles. Até onde eu vi, eles são usados ​​principalmente com o Exchange / Office Communication Server. E se você usar o mesmo certificado para sites diferentes, abusará da semântica x509. Mas eles funcionam na maioria das pilhas TLS.
pehrs 26/03/10
6
Também SNI. Sua declaração não é mais definitiva, pehrs. Sua explicação é historicamente precisa, mas não reflete mais as tecnologias atuais.
Warner
4
O SNI (ainda?) Não funciona com o IE6 no Windows XP. Que tipo de limite de valor, considerando a participação de mercado. Acredito que o usuário original estava mais interessado no que aconteceria do que no conjunto de hacks existentes para contorná-lo.
pehrs 26/03
Tentou corrigir o erro de ortografia no final SHTTP para HTTPS, mas isso foi rejeitado como uma edição muito pequena.
Stuart
8

A solução real para esse problema é "Indicação do nome do servidor":

http://en.wikipedia.org/wiki/Server_Name_Indication

Ele está apenas começando a ser implementado em servidores e clientes da Web, então não é realmente algo que você possa usar agora, mas espero que daqui a alguns anos isso não seja um grande problema.


fonte
2

O problema é que o certificado SSL está vinculado ao endereço IP, não ao nome do host. Quando a conexão entra no endereço IP para uma solicitação HTTPS, a primeira ação é estabelecer a comunicação SSL passando o certificado do servidor e / ou o certificado do cliente. Durante esse estágio do handshake de conexão, o servidor Apache não tem como saber para que serve a solicitação. Isso é diferente para o tráfego HTTP (não SSL), pois depois que a conexão é estabelecida, o servidor Apache pode determinar a configuração do host virtual a ser usada se o cliente enviar o Hostcabeçalho ou entregá-lo ao primeiro host virtual configurado.

Se você tivesse vários hosts virtuais no mesmo domínio, poderia configurar um único certificado curinga no endereço IP e ter vários hosts virtuais com nomes de servidor diferentes definidos; no entanto, se esses nomes de servidor não estiverem com o mesmo nome de domínio, eles gerarão erros no servidor do cliente. Isso funcionaria, pois o certificado curinga seria válido para todos os nomes de host nesse nome de domínio. Você precisaria de outro endereço IP se os nomes de domínio fossem diferentes, pois o primeiro certificado definido para esse endereço IP seria o apresentado para conectar clientes.

Jeremy Bouse
fonte
1

Isso pode ser adicionado a um único certificado SSL como SAN (Nome Alternativo do Assunto). Na minha experiência, eu tive que solicitar um certificado de organização sll. eu usei globalsign.


fonte
1

Na verdade, com o software moderno, você PODE servir vários sites HTTPS em um único endereço IP, usando um novo recurso chamado 'SNI - Server Name Indication'.

http://en.wikipedia.org/wiki/Server_Name_Indication

http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI

Ainda tenho que usar isso sozinho, mas parece bom para sites internos e da intranet. A maioria dos navegadores modernos suporta SNI. O IE6 não suporta SNI, mas o IE7 sim.

(Correção: 20100426 - O SNI não é compatível com o Windows XP. O Windows Vista e superior suportam o SNI. Consulte a "Seção 2.2.3" em http://msdn.microsoft.com/en-us/library/dd208005% 28v = PROT.13% 29.aspx # id8 ).

Stefan Lasiewski
fonte
2
Com o IE, o suporte não vem da versão do IE, mas da versão do sistema operacional subjacente. Vista e acima suportam SNI. O XP não, portanto, mesmo com o IE8 no XP, você não obterá o SNI.
Nasko
1

Estou trabalhando no mesmo problema. Como meu teste, o IE7 e posterior (apenas no Win7 e Vista) / Chrome / Firefox / Safari / Opera suportam "Indicação do nome do servidor". De fato, se o navegador usa o Tsl 1.0, ele suporta "Indicação do nome do servidor".

Sean
fonte
0

Eu acho que o OP está perguntando o que acontece se ele adicionar um certificado SSL a um IP que tenha muitos hosts virtuais. Se nenhum dos outros virtualhosts usar um certificado SSL, ele deve estar limpo.

Iraklis
fonte
Bem, eu estou intrigado com a pergunta. O título do Q diz preto e o conteúdo diz branco.
precisa
este é o branco
Iraklis
0

Se você tentar adicionar dois certificados no mesmo IP, somente o certificado de primeira leitura será usado em todos os lugares. Um IP - um certificado SSL.

Se você deseja obter mais certificados SSL no mesmo IP, considere obter vários domínios (UCC - confira @ godaddy ) ou certificado curinga (mais caro).

Andrejs Cainikovs
fonte
Você quer dizer que o certificado adicionado pela primeira vez no Apache conf será usado para ambos?
nitins
1
Se você possui dois certificados - para o site A e B, e o apache carrega a configuração dos hosts na sequência A.conf, então B.conf, ele usará o certificado do A.conf. Ou vice-versa.
Andrejs Cainikovs 26/03