Esta pergunta é muito parecida com a que eu respondi ontem: nginx e SNI: é possível resolver automaticamente o certificado SSL por nome de domínio
Não é possível rejeitar a conexão antes que o usuário veja uma mensagem de certificado inválida em seu navegador. No momento em que o Nginx pode retornar uma resposta HTTP 403, o handshake SSL acabou e, para concluir o handshake, o navegador deve aceitar o certificado fornecido. Você só pode rejeitar a conexão depois que o usuário aceitou o certificado configurando um servidor padrão:
server {
listen 433 default_server ssl;
ssl_certificate common.crt;
ssl_certificate_key common.key;
return 403;
}
No entanto, os navegadores mais recentes suportam Indicação do Nome do Servidor e, se você tiver um conjunto de certificados para cada vhost, é muito improvável que um usuário normal veja essa mensagem.
Pode ser possível rejeitar conexões sem nome de host válido indicado pelo SSL com o iptables, mas isso provavelmente é bastante complicado e não estaria de acordo com nenhum padrão.
Informações atualizadas: É possível que return 444
cancele a conexão tcp imediatamente antes que um erro de certificado seja exibido.