Como outros afirmaram, basta colocar o primeiro site como o primeiro host virtual e ele funcionará se o SNI estiver ativado ou não:
<VirtualHost *:443>
ServerName www.site1.com
DocumentRoot /site1/
SSLCertificateKeyFile /ssl/server1.key
SSLCertificateFile /ssl/server1.crt
</VirtualHost>
<VirtualHost *:443>
ServerName www.site2.com
DocumentRoot /site2/
SSLCertificateKeyFile /ssl/server2.key
SSLCertificateFile /ssl/server2.crt
</VirtualHost>
No entanto, os navegadores não-SNI para o site 2 receberão o certificado de site1 e, assim, haverá erro (e os usuários poderão se perguntar por que receberam um certificado para um site diferente, embora se ainda estiverem em navegadores não-SNI provavelmente não é especialista em tecnologia).
No entanto, é possível fornecer acesso a todos usuários para todos seus sites, apesar do aparente problema de SNI, se você tiver um único certificado que cubra todos os sites campo de nome alternativo do assunto.
Você pode ter dois hosts virtuais usando a mesma chave e certificado:
<VirtualHost *:443>
ServerName www.site1.com
DocumentRoot /site1/
SSLCertificateKeyFile /ssl/server.key
SSLCertificateFile /ssl/server.crt
</VirtualHost>
<VirtualHost *:443>
ServerName www.site2.com
DocumentRoot /site2/
SSLCertificateKeyFile /ssl/server.key
SSLCertificateFile /ssl/server.crt
</VirtualHost>
Então você tem a mesma chave e certificado para dois sites (ou três, ou mais, se quiser).
Portanto, o site www.site1.com sempre funciona como, mesmo sem suporte a SNI, é o host padrão.
Para www.site2.com, fica mais interessante:
- Para navegadores que suportam SNI, eles fornecem o nome do servidor e vão direto para a configuração do host virtual site2 e isso funciona.
- Para navegadores que não suportam SNI, eles são padronizados para a configuração do site1, que retorna seu certificado, mas como o certificado funciona para ambos os sites, isso é realmente bom. Depois que a negociação de SSL é concluída, a primeira solicitação da Web é enviada, mas, como esse servidor recebe o nome do servidor, ela pode servir corretamente o documento do diretório / site2 /.
Isso funciona porque uma conexão https envolve duas etapas distintas e não relacionadas: 1) fazer negociação SSL e 2) solicitar documento usando essa conexão SSL, e essas duas etapas não precisam ser do mesmo host virtual (embora a maioria das pessoas suponha que sim).
A principal desvantagem dessa opção é que, dependendo da proximidade dos sites, pode parecer pouco profissional ter duas URLs diferentes no mesmo certificado. No entanto, presumivelmente, se eles estão compartilhando um host, eles são empresas um pouco relacionadas (a menos que o servidor seja de propriedade de uma empresa de hospedagem), portanto, isso pode não ser um problema.
Acho isso uma pequena solução útil, especialmente para servidores dev onde eu poderia hospedar vários sites em um endereço IP, onde eu uso centavos autoassinados com vários URLs no campo de nome alternativo do assunto.