Apache, Linux

Tutorial de Apache – Parte 4 – VirtualHosts usando SSL


Olá caros companheiros.

Venho aqui continuar nosso aprendizado do grandioso Apache, o servidor web, não o helicóptero, infelizmente. Na lição de hoje aprenderemos um pouco sobre como funcionam os VirtualHosts sobre HTTPs no apache.

Lembrando que é extremamente recomendável que você tenha nossa máquina virtual rodando em seu ambiente de estudo, assim como ter lido a parte 2 e a parte 3 do nosso tutorial.

Vamos colocar a mão na massa!

Na última lição, utilizamos o arquivo ssl.conf que vem por default instalado com o mod_ssl. Hoje, vamos descartar este arquivo, e concentrar nossas alterações no bom e velho httpd.conf.

Vamos renomear o ssl.conf:


mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.bak

Agora, vamos gerar certificados separados para nossos dois ‘domínios’.

Para o domain1:


openssl req -new -x509 -nodes -out domain1.crt -keyout domain1.key

Completaremos os campos da seguinte maneira:

domain1
domain1

E para o domain2:


openssl req -new -x509 -nodes -out domain2.crt -keyout domain2.key

Completaremos os campos da seguinte maneira:

domain2
domain2

Copiamos os arquivos para /etc/httpd/conf.d/ssl/, apenas para fins de padronização:


cp domain* /etc/httpd/conf.d/ssl

Feito isso, vamos editar nosso arquivo httpd.conf e inserir os virtualhosts escutando na porta 443.

Vamos editar o arquivo:


vim /etc/httpd/conf/httpd.conf

E adicionar as seguintes linhas:


LoadModule ssl_module modules/mod_ssl.so
Listen 443
NameVirtualHost *:443

Assim, habilitamos novamente o apache para escutar na porta 443 e carregamos o módulo mod_ssl, pois renomeamos nosso arquivo ssl.conf. Também adicionamos um nome para nossos virtualhosts https.

Feito isso, basta duplicar nossos virtualhosts que estão na porta 80, adicionando o certificado digital que geramos para cada domínio em cada um deles. O resultado será o seguinte:

Editamos novamente o httpd.conf:


vim /etc/httpd/conf/httpd.conf

E adicionamos os VirtualHosts:


<VirtualHost *:443>
 ServerAdmin admin@domain1.com.br
 DocumentRoot /var/www/html/domain1
 ServerName domain1.com.br
 ErrorLog /var/log/httpd/domain1_error
 CustomLog /var/log/httpd/domain1-access_log common
 SSLEngine On
 SSLCertificateFile /etc/httpd/conf.d/ssl/domain1.crt
 SSLCertificateKeyFile /etc/httpd/conf.d/ssl/domain1.key
</VirtualHost>
<VirtualHost *:443>
 ServerAdmin admin@domain2.com.br
 DocumentRoot /var/www/html/domain2
 ServerName domain2.com.br
 ErrorLog /var/log/httpd/domain2_error
 CustomLog /var/log/httpd/domain2-access_log common
 SSLEngine On
 SSLCertificateFile /etc/httpd/conf.d/ssl/domain2.crt
 SSLCertificateKeyFile /etc/httpd/conf.d/ssl/domain2.key
</VirtualHost>

Agora, basta reiniciarmos o apache:


service httpd restart

E acessamos o domain1.com.br e o domain2.com.br sobre https:

Podemos verificar os detalhes do certificado para vermos que estão sendo aplicados certificados diferentes para cada domínio.

domain1
domain1.com.br sobre https
domain2
domain2.com.br sobre https

É isso companheiros, até a próxima lição, onde veremos um tópico um pouco mais avançado:  Segurança do servidor web !

10 comentários sobre “Tutorial de Apache – Parte 4 – VirtualHosts usando SSL

  1. Qual foi a versão do Apache que você utilizou para fazer esse teste? Pergunto isso porque estou utilizando a 2.2.16 no Ubuntu e simplesmente não tem como… eu não consigo deixar a porta 443 com 2 domínios diferentes cada qual com o seu certificado, quando eu instalo o 2o. certificado e tento acessar esse site o browser mostra um erro de certificado informando que eu estou usando o certificado do domínio principal do servidor ao invés do 2o. que foi instalado, já conferi os arquivos crt e key e estão corretos, nas configurações dos VirtualHost cada um está carregando os seus arquivos corretamente. A única forma que consegui resolver foi instalar esse 2o. certificado em outra porta, 1443 por exemplo… mas gostaria de deixar na padrão… se tiver alguma dica por favor manda aí!

    Curtir

    1. Jerônimo,

      O funcionamento do apache no debian/ubuntu é bem diferente.

      Tente colocar os virtualhosts dentro do arquivo de configuração do módulo, algo do tipo /etc/apache2/modules/ssl.conf ou ssl.load.

      Minha sugestão é fazer os destes sobre centos ou redhat, pode ser baixando nossa VM, para realmente enxergarmos se é alguma peculiaridade do ubuntu.

      Vou tentar simular o seu erro em uma VM com o ubuntu para enxergar qual a peculiaridade.

      Curtir

      1. Pesquisei muito e só encontrei pessoas falando que não é possível fazer isso no Apache2, por isso te perguntei que versão do Apache você usou, da forma que eu fiz no meu server com Apache2 até resolve, eu redireciono as chamadas do 2o. domínio automaticamente para o endereço https://www.meudominio2.com.br:1443/, mas fica meio estranho… Mas como você mesmo falou, realmente pode ser uma particularidade no próprio Ubuntu também, não havia me ligado nisso e como você escreveu as configurações são um pouco diferentes mesmo, principalmente no que diz respeito aos arquivos onde são inseridos, no Ubuntu/Apache2 os VirtualHosts são configurados cada qual em seu arquivo, embora que o conteúdo aparentemente é igual ao que você passou no seu artigo, não sei até que ponto isso influencia ou não….

        []’s

        Curtir

Deixe um comentário