Às vezes, temos diversos domínios em uso dentro do nosso servidor web Apache. Por exemplo, podemos ter esses domínios:
- exemplo.com
- www.exemplo.com
- videos.exemplo.com
Aqui temos duas opções,
- Usar um certificado ssl para cada subdomínio
- Usar um único certificado para o domínio e expandir ele para todos os subdomínios com um *
Usar um certificado ssl para cada subdomínio
Essa é uma opção mais trabalhosa. Mas podemos colocar nossos certificados dentro dos VirtualHosts
<VirtualHost *:443> ServerName seu_dominio_aqui DocumentRoot /var/www/html SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key </VirtualHost> <VirtualHost *:443> ServerName www.example.com ServerAlias example.com DocumentRoot /var/www/example.com/public_html ErrorLog /var/www/example.com/error.log CustomLog /var/www/example.com/requests.log combined SSLEngine on SSLCertificateFile /etc/apache2/ssl/example/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/example/apache.key </VirtualHost> <VirtualHost *:443> ServerName www.example2.com DocumentRoot /var/www/example2.com/public_html ServerAlias example2.com ErrorLog /var/www/example2.com/error.log CustomLog /var/www/example2.com/requests.log combined SSLEngine on SSLCertificateFile /etc/apache2/ssl/example2/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/example2/apache.key </VirtualHost>
Veja artigos relacionados:
- Apache: Como Trocar a Porta de Acesso
- Apache: Habilitando SSL/TLS para Acesso com HTTPS
- Apache: Exemplos de Configuração de Virtual Host
Usar um único certificado para o domínio e expandir ele para todos os subdomínios com um *
Aqui podemos, no ato da criação do certificado, colocar um asterisco no domínio no campo Common Name(nome comum). Por exemplo, se tenho todos aqueles subdomínios lá em cima, preciso colocar apenas um common name assim: *.exemplo.com e tudo estará resolvido.
Um certificado SSL curinga(ou *) é considerado uma opção ao procurar proteger vários subdomínios no mesmo nome de domínio. Esses certificados usam um caractere curinga (*) no campo de nome de domínio para proteger vários subdomínios (hosts) vinculados ao mesmo domínio base.
O Common Name(nome comum) para certificados curinga sempre começa com um asterisco e um ponto (*.). Por exemplo, *.(nomedodomínio).com
Por exemplo, um certificado curinga padrão emitido para *.domain.com protegerá www.domain.com, mail.domain.com, info.domain.com etc., mas não protegerá mail.test.com.
O Subject Alternative Name (SAN) deve ser um domínio curinga(por exemplo, *.seudominio.com) ou baseado em seus domínios curinga listados. Por exemplo, se um de seus domínios curinga for *.example.com, você poderá usar www.example.com, mas não mail.secure.com. Uma exceção é um certificado Secure Site Pro SSL que protege ambos os domínios.
Instalação de certificados em servidores web baseados em CNs
Aqui vamos ver sobre configuração de certificado SSL nos servidores web Nginx e Apache.
Nginx:
Quando a solicitação chega, o servidor encontra os blocos de servidor correspondentes com base no CN ou SAN usado na solicitação. O Nginx compara o server_name com o CN ou SAN presente na solicitação. Se um server_name correspondente for encontrado no conjunto de blocos de servidor, todos os blocos de servidor correspondentes serão protegidos. Por exemplo:
server { server_name 8010.abc-example.com *.abc-example.com; listen 123.123.123.123:8010 ; } server { server_name 8020.abc-example.com *.mail.abc-example.com ; listen 123.123.123.123:8020 ; } server { server_name 8030.abc-example.com *.abc-example.com ; listen 123.123.123.123:8030 ; }
No exemplo acima, quando você solicita automação para:
- CN=*.abc-example.com – Protege os blocos de servidor da porta 8010 e 8030
- CN=*.mail.abc-example.com – Protege apenas o bloco de servidor da porta 8020.
- CN={8010/8020/8030}.abc-example.com – Protege apenas o respectivo bloco de servidor.
- CN=.abc-example.com e SAN=.mail.abc-example.com – Protege todos os blocos de servidor.
Apache
Quando a solicitação de automação chega, o servidor encontra os blocos <VirtualHost> correspondentes com base no CN ou SAN usado na solicitação. O Apache compara ServerName e ServerAlias com o CN ou SAN presente na solicitação. Se um ServerName ou ServerAlias correspondente for encontrado no conjunto de hosts virtuais, todos os blocos de host virtual correspondentes serão protegidos.
Exemplo,
Listen 551 <VirtualHost 125.125.125.125:551> ServerName 551.abc-example.com ServerAlias *.mail.abc-example.com </VirtualHost> Listen 552 <VirtualHost 125.125.125.125:552> ServerName 552.abc-example.com ServerAlias *.abc-example.com </VirtualHost> Listen 553 <VirtualHost 125.125.125.125:553> ServerName 553.abc-example.com ServerAlias *.abc-example.com securemail.abc-example.com </VirtualHost>
No exemplo acima, quando você solicita automação para:
- CN=*.abc-example.com – protege os blocos de host virtual da porta 552 e 553.
- CN=*.mail.abc-example.com – Protege apenas o bloco de host virtual da porta 551.
- CN={551/552/553}.abc-example.com – Protege apenas o respectivo bloco de host virtual.
- CN=.abc-example.com e SAN=.mail.abc-example.com – Protege todos os blocos de host virtual.