HTTPS no Apache | Andre Rocha
Comunicações HTTP podem ser criptografadas com SSL. Quando isso ocorre, o protocolo passa a se chamar HTTPS. O SSL, de forma muito resumida, utiliza o conceito de chaves privadas e públicas. Para saber um pouco mais sobre SSL e como ele funciona, clique aqui.
No caso de um servidor web, a chave pública costuma ser distribuída livremente. Somente através desta chave pode-se decriptografar os dados que foram criptografados pela chave privada. Vou dar mais detalhes e exemplos mais tarde.
Mas como distribuir esta chave em um servidor web? Fácil: Através de um certificado digital. Provavelmente você já ouviu falar em certificados digitais.
Existem vários tipos de certificados. Poderíamos utilizar nesta dica um "Wildcard SSL Certificate", que é um certificado que pode ser usado com todos os subdomínios hospedados em um mesmo servidor. Mas hoje em dia isso não funciona muito bem. Então usaremos como exemplo o domínio forenaite.com.br, e o hostname rocha.
Chega de enrolar. Mão na massa! 🙂
Você vai precisar de um servidor Linux ou Solaris, com OpenSSL e Apache já instalados e funcionando. Outras distribuições como FreeBSD e afins também devem funcionar. O processo de configuração é genérico, e a única coisa que muda são alguns diretórios e nomes de arquivo de configuração.
I) Gerando a Chave Privada:
Lembrando que esta chave deve ser secreta e serve apenas para criptografar os dados.
openssl genrsa -des3 -out rocha.forenaite.com.br.key 1024
Este comando gera uma chave privada RSA de 1024 bits. Para uma validação mais extensa, o tamanho da chave deve ser 2048 bits.
É altamente recomendável que seja utilizada uma frase secreta, semelhante a uma senha, para proteção da chave privada. Neste exemplo, será utilizada esta frase secreta:
"VouCriptografarParaNinguemSaber"
Nota: Para ignorar a solicitação de senha, omita o parâmetro "-des3" do comando que gera a chave.
Importante: Se a chave privada ficar desprotegida (sem senha), recomenda-se que apenas 1 administrador tenha acesso ao servidor onde esta ficar armazenada, e que todas as medidas lógicas de segurança, como boa configuração dos aplicativos e regras de firewall sejam empregadas.
Para que esta chave privada possa ser utilizada em servidores web, ela precisa estar assinada por uma autoridade certificadora.
OBS: É necessário usar nomes FQDN.
II) Gerando a requisição de assinatura da chave privada:
Para que uma chave privada possa ser assinada por uma CA (autoridade certificadora), uma requisição deve ser emitida. Os seguintes comandos geram uma requisição de assinatura, e o arquivo resultante (CSR) deve ser enviado a CA (Ex: CertSign, VeriSign, TrustSign, etc). Ah, nós também podemos atuar como uma CA! Você já vai saber como.
openssl req -new -key /etc/pki/tls/private/rocha.forenaite.com.br.key -out rocha.forenaite.com.br.csr
Uma mensagem semelhante a esta será exibida:
Enter pass phrase for rocha.forenaite.com.br.key:
Neste ponto você insere a senha que foi utilizada para gerar a chave privada. Lembra?
Outras informações precisam ser preenchidas. Complete somente os campos mostrados abaixo:
Country Name (2 letter code) [GB]: BR
State or Province Name (full name) [Berkshire]: Rio de Janeiro
Locality Name (eg, city) [Newbury]: Rio de Janeiro
Organization Name (eg, company) [My Company Ltd]: Forenaite Tecnologia
Organizational Unit Name (eg, section) []: Arquitetura de Soluções
Common Name (eg, your name or your server's hostname) []: rocha.forenaite.com.br
Email Address []:VAZIO! NÃO DIGITAR NADA!
A challenge password []: VAZIO! NÃO DIGITAR NADA!
An optional company name []:VAZIO! NÃO DIGITAR NADA!
Dica: Não esquecer de incluir no seu Backup as chaves privadas!
III) Assinando localmente a chave
Para que uma chave criptográfica possa ser utilizada, ela precisa estar assinada por uma autoridade certificadora, como por exemplo a VeriSign. Como neste exemplo não estão sendo considerados os recursos necessários para o investimento em serviços de uma autoridade certificadora, será utilizada uma técnica que permite que a chave seja assinada localmente, ou seja, o administrador que está criando a chave criptográfica será também a autoridade certiticadora que a assinará.
Para assinar a chave, basta utilizar o comando abaixo, preenchendo as informações solicitadas tendo como exemplo o texto em vermelho a seguir:
openssl req -new -key rocha.forenaite.com.br.key -x509 -days 365 -out /etc/pki/tls/certs/rocha.forenaite.com.br.crt
Neste ponto você insere novamente a senha que foi utilizada para gerar a chave privada.
Restringindo o acesso ao arquivo chave:
chmod 600 rocha.forenaite.com.br.c* /etc/pki/tls/private/NOME.dominio.com.br.key
IV) Informações imprescindíveis:
A chave assinada (rocha.forenaite.com.br.crt), também é conhecida como chave pública, e pode ser importada em uma estação de trabalho, por exemplo. Comunicações criptografadas com a chave privada gerada neste exemplo só podem ser decriptografadas com esta chave assinada (pública), e vice versa. Isso garante a autenticidade, confidencialidade e a integridade das comunicações feitas com o uso destas chaves (3 pilares da certificação digital).
OBS: Formatos PEM são semelhantes aos formatos gerados neste procedimento, pois são arquivos em Base64 encodados em ASCII, que contém as diretivas "—–BEGIN CERTIFICATE—–" e "—–END CERTIFICATE—–".
Certificados para Servidores, Certificados Intermediários e Chaves Privadas podem ser todas colocadas no formato PEM.