Se você deseja oferecer HTTPS desde o início, deve fornecer um certificado aceito pelo cliente desde o início. Porque, caso contrário, o cliente não aceitará a conexão SSL e você não poderá redirecionar o cliente para um site diferente ou para uma versão somente HTTP. Isso significa apoiar este caso, você
- é necessário ter um único certificado contendo todos os seus domínios, para que você possa fornecer aos clientes não SNI um certificado adequado. Mas, neste caso, você não precisa de SNI.
- ou você precisa instalar algum certificado padrão que não corresponda à maioria dos seus nomes. Nesse caso, você pode fornecer ao cliente apenas uma página diferente ou redirecioná-la se o cliente aceitar esse certificado inválido.
Se você não precisar do HTTPS desde o início, ou seja, se o cliente geralmente se conectar primeiro com o HTTP simples, tente detectar o suporte ao SNI para poder redirecionar o cliente posteriormente. Isso pode ser feito incluindo uma imagem, algum JavaScript ou algo semelhante no site HTTPS e, se o carregamento for bem-sucedido, você saberá que o cliente suporta SNI ou ignora erros de certificado.
É claro que isso deixa tudo aberto para ataques do tipo man-in-the-middle, porque tudo que o man-in-the-middle precisa fazer é servir um certificado diferente ou tornar o HTTPS indisponível, pois nesse caso você nunca tentará para atualizar a conexão para HTTPS. Além disso, isso pode ser usado para fazer parecer que os clientes suportam SNI, se o man-in-the-middle o fizer. E não apenas os clientes não SNI são afetados por isso, mas os clientes compatíveis com SNI só podem ser interceptados. Portanto, embora isso seja possível em teoria, isso não é recomendado, porque você pode simplesmente fazer tudo do meio do caminho e, assim, fazer o ponto principal do uso do HTTPS.