Configurando SSL no servidor de desenvolvimento (Apache) - PHPit
Configurando SSL no servidor de desenvolvimento (Apache)
Você já deve ter se perguntado como funciona o protocolo HTTPS ou então como configurá-lo na sua máquina.
Antes de levar um sistema ao servidor de produção, é essencial testá-lo em um ambiente o mais semelhante possível ao servidor de produção. Muitas pessoas já perguntaram como é possível disponibilizar uma conexão HTTPS com o localhost do Apache.
Pois bem, hoje vou ensinar como configurar o HTTPS no Apache a partir de um certificado SSL auto-assinado.
Neste exemplo eu estou utilizando uma distro Linux chamada Crunchbang (Debian-based – assim como Ubuntu e Mint), mas deve funcionar em qualquer sistema Unix-like. Para os que usam Windows, infelizmente, vou ficar devendo…
Antes de começar, é importante ter um conhecimento básico do Terminal e o openssl instalado. Também usarei o gedit, mas você pode utilizar qualquer alternativa, como vim, nano, kate etc.
Gerando um certificado SSL auto-assinado
Abra o terminal e preste atenção em qual diretório você está. Se estiver com o usuário normal, provavelmente estará na sua home. Os comandos vão gerar os certificados no diretório corrente. Não há problema em gerá-los na sua home, já que esses arquivos servirão apenas para o servidor de testes. Se alguém tiver acesso a eles, nada extraordinariamente ruim deverá acontecer. Mas, enfim, você está avisado! :)
Todos os comandos neste tutorial assumem que você esteja autenticado como root. Para isso, basta utilizar o comando sudo su, ou apenas su (dependendo da sua distro).
Vamos começar gerando um certificado SSL de 1024 bits. A sua chave pública será X.509 (PKI). Meus nomes de arquivo serão todos phpit, para ficar mais fácil de visualizar. Você pode utilizar o nome que quiser, mas cuide para não se perder!
$ openssl genrsa -out phpit.key 1024
$ openssl req -new -key phpit.key -x509 -out phpit.crt
Guardando o certificado no diretório do Apache
Depois de gerar o certificado e a chave pública, precisamos guardar esses arquivos em um diretório do Apache.
Caso ainda não exista (o que é bastante provável), vamos criar esse diretório.
$ mkdir /etc/apache2/ssl/
Agora é só mover os dois arquivos para o novo diretório:
$ mv phpit.key phpit.crt /etc/apache2/ssl/
Por fim, precisamos gerar um arquivo pem para que nosso certificado seja compatível com todos os navegadores. A diferença entre o arquivo crt e o pem é apenas a extensão, o conteúdo é o mesmo. Vamos então, apenas copiar:
$ cd /etc/apache2/ssl/
$ cp phpit.crt phpit.pem
Configurando o certificado SSL para permitir o tráfego HTTPS na porta 443
Agora precisamos criar um VHost que aceite o tráfego via HTTPS. Para isso, precisaremos do certificado que foi criado.
A porta padrão do HTTP é a 80. Já a porta padrão do tráfego HTTPS é 443. O navegador irá automaticamente trafegar por essa porta quando o protocolo for definido para HTTPS. Caso o servidor não esteja escutando nessa porta, o servidor não receberá os dados.
É bastante provável que o Apache já esteja configurado para escutar na porta 443 mas, por via das dúvidas, vamos conferir o arquivo de portas.
$ cd /etc/apache2/ports.conf
Por padrão, o Apache já vem configurado para escutar na porta 443 caso o mod_ssl esteja habilitado. Você deve ver algo semelhante nesse arquivo:
Se não houver nada semelhante, pode adicionar.
O próximo passo é configurar o caminho dos arquivos de SSL. Aqui vou usar o gedit, mas você pode utilizar o editor que preferir.
$ gedit /etc/apache2/sites-enabled/000-default
Ao acessar o arquivo, você deve ter algo parecido com isso (destaquei as linhas mais importantes):
Essa é a configuração para porta 80. Precisamos configurar a porta 443. O que eu fiz foi duplicar o conteúdo do arquivo e apenas modificar a porta 80 para 443, ficando, assim, com VirtualHosts.
Agora precisamos configurar três diretivas (mas só no VHost 443):
SSLEngine, SSLCertificateFile e SSLCertificateKeyFile.
Logo após o fechamento da última declaração de diretório, vamos adicionar as seguintes linhas:
SSLCertificateFile /etc/apache2/ssl/phpit.pem
SSLCertificateKeyFile /etc/apache2/ssl/phpit.key
Com essas três diretivos nós ativamos o SSL apenas para a porta 443 (visto que estamos editando o VHost dessa porta) e apontamos para os dois arquivos do certificado.
Ao final, o arquivo deve ficar mais ou menos assim:
Salve o arquivo e estamos prontos.
Agora só resta ativar o módulo SSL no Apache:
Importante (dica do leitor Jardel Rodrigues): se o seu sistema não reconhecer o comando a2enmod, você deve instalar essa funcionalidade. Em distribuições baseadas em Debian (Mint, Ubuntu, Crunchbag etc.), você pode utilizar o comando apt-get install apache2.2-common para instalar o pacote básico de funcionalidades do Apache.
Só falta reiniciar o apache:
Para verificar que tudo está OK, você deve tentar acessar https://localhost/.
Pelo fato de o certificado ser auto-assinado, ele não pertence a nenhuma entidade certificadora confiável. Sendo assim, a primeira coisa que o navegador vai acusar é isso. Basta adicionar uma exceção e tudo estará OK para trafegar utilizando criptografia SSL.
Caso não tenha conseguido fazer funcionar, tente refazer os passos e verificar se fez tudo certinho. Se, mesmo assim, não rolar, deixe um comentário e vamos tentar te ajudar.
Fazia tempo que eu queria escrever um artigo desse tipo, mas nunca tirei tempo para esmiuçar o processo. Espero que possa ajudar vocês a tornarem o ambiente local o mais parecido possível com o servidor de produção.