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:
E para o domain2:
openssl req -new -x509 -nodes -out domain2.crt -keyout domain2.key
Completaremos os campos da seguinte maneira:
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.
É isso companheiros, até a próxima lição, onde veremos um tópico um pouco mais avançado: Segurança do servidor web !
Excelente artigo, parabéns!! Qual vai ser o foco do artigo sobre seguraça? Pretende falar sobre o selinux?
CurtirCurtir
Aderbal, primeiramente obrigado pela visita!
Na parte de segurança, vamos abordar um pouco de SELinux sim, além de várias outras técnicas simples que melhoram a segurança do servidor.
CurtirCurtir
Aderbal, segue o link para download da VM: http://www.4shared.com/file/gj1wLql4/rhel6.html
user: root pass: apache
CurtirCurtir
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í!
CurtirCurtir
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.
CurtirCurtir
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
CurtirCurtir
Você disponibiliza uma vm do Red Hat?? Onde encontro??
CurtirCurtir
Para poder ter suporte a mais de um dominio virtual em um mesmo ip e porta, eh necessario que tanto o cliente (navegador) quanto o servidor(apache) tenham suporte a SNI. http://en.wikipedia.org/wiki/Server_Name_Indication .
Isso eh verdade para apache 2.2.12 e openssl 0.9.8
CurtirCurtir
Oi Fábio!!
Lí num comentário que você fez treinamento na Red Hat em São Paulo. Quem deu aula para você lá?
Abraço
Kleiton Bertoldo
CurtirCurtir
Kleiton,
Tive aula com dois professores, um deles foi o Paulo, vulgo ‘Braço” e o outro foi o Aslan Carlos (RHCA) que manja demais!
Abraço!
CurtirCurtir