Atualmente o Apache está hospedando vários subdomínios com certificados de host gerados com certbot e um desafio http.
Agora quero configurar um host SSL virtual padrão para redirecionar subdomínios inexistentes para o principal. Para isso irei gerar um certificado curinga com desafio de DNS.
Como atualmente não sou capaz de automatizar a renovação com desafio de DNS, quero usar o certificado curinga apenas para o host SSL padrão no Apache.
Minha pergunta é: quando ocorrer a primeira negociação entre o Apache e o navegador, o Apache procurará primeiro o certificado na configuração correspondente ao host solicitado ou o Apache servirá sempre o certificado curinga configurado no host SSL padrão?
Responder1
ODocumentação do Apachecontém uma seção detalhada sobre qual VirtualHost é escolhido para uma solicitação. Uma citação da seção "Como o servidor seleciona o host virtual baseado em nome adequado":
É importante reconhecer que o primeiro passo na resolução de host virtual baseada em nome é a resolução baseada em IP. A resolução de host virtual baseada em nome escolhe apenas o host virtual baseado em nome mais apropriado após restringir os candidatos à melhor correspondência baseada em IP. Usar um curinga (*) para o endereço IP em todas as diretivas VirtualHost torna esse mapeamento baseado em IP irrelevante.
Quando uma solicitação chega, o servidor encontrará o argumento <VirtualHost> melhor (mais específico) correspondente com base no endereço IP e na porta usada pela solicitação.Se houver mais de um host virtual contendo essa combinação de endereço e porta de melhor correspondência, o Apache comparará ainda mais as diretivas ServerName e ServerAlias com o nome do servidor presente na solicitação.
Se você omitir a diretiva ServerName de qualquer host virtual baseado em nome, o servidor assumirá como padrão um nome de domínio totalmente qualificado (FQDN) derivado do nome do host do sistema. Esse nome de servidor definido implicitamente pode levar a uma correspondência de host virtual contra-intuitiva e é desencorajado.
Você deve criar um VirtualHost padrão dedicado. Cada solicitação para um host não listado explicitamente em outro bloco VirtualHost será direcionada para lá, para que você possa escolher qual certificado deseja usar lá.
Responder2
O Apache permite especificar a diretiva SSLCertificateFile no nível do host virtual. VerArquivoCertificado SSL, que diz "Contexto: configuração do servidor, host virtual". Portanto, qualquer host virtual usado para responder à solicitação - seja o host virtual padrão ou outro - ele usará o certificado configurado com SSLCertificateFile nesse host virtual.
Espero que isso responda à sua pergunta.