Usando um certificado self-signed

No Debian e derivados você pode gerar um certificado caseiro utilizando o script “make-ssl-cert”, instalado através do pacote “ssl-cert”:

# apt-get install ssl-cert

Ao usar o script, você deve especificar o arquivo com o template (/usr/share/ssl-cert/ssleay.cnf) e o arquivo onde o certificado será salvo (/etc/apache2/ssl/apache.pem, para gerar um certificado padrão para o servidor), como em:

# mkdir /etc/apache2/ssl/
# cd /etc/apache2/ssl/
# make-ssl-cert /usr/share/ssl-cert/ssleay.cnf apache.pem
-days 1095

A opção “-days” especifica a validade do certificado, que no exemplo será de 3 anos. O script solicitará as informações sobre a organização que serão incluídas no certificado, incluindo o código de país, estado, cidade e o nome da empresa. Estes são dados públicos, que serão exibidos aos clientes como parte das propriedades do certificado. O mais importante vem no final, quando o script pergunta:

Common Name (eg, your name or your server’s hostname) []:

Nesse ponto, você deve sempre fornecer a URL completa do servidor onde o certificado será usado, como em “www.gdhpress.com.br” ou “ssl.gdhn.com.br”. Se você especificar um domínio diferente, o cliente receberá um aviso adicional ao se conectar, avisando do problema. Isso afastará visitantes, já que muitos pensarão tratar-se de uma fraude.

Com o certificado gerado, abra agora o arquivo “/etc/apache2/ports.conf” e adicione a linha “Listen 443” (a porta usada pelo https), como em:

Port 80
Listen 443

Com isso, o Apache 2 já está configurado. Falta apenas ativar o uso do SSL dentro da configuração do(s) virtual host(s) onde ele for ser utilizado. Para testar, vamos ativá-lo na página padrão que usamos para testar o servidor.

Abra o arquivo “/etc/apache2/sites-available/default“. No início do arquivo, substitua a linha “NameVirtualHost *”, por:

NameVirtualHost *:443
NameVirtualHost *:80

Isso explica que o Apache deve escutar tanto a porta 80 padrão, quanto a porta 443, usada pelo SSL. Logo em seguida, substitua a linha “<VirtualHost *>”, por:

<VirtualHost *:80>

Até aqui, dividimos a configuração em duas seções, uma para a porta 80, outra para a porta 443, usada pelo SSL. Falta agora adicionar a seção referente à configuração do SSL no final do arquivo:

<VirtualHost *:443>
DocumentRoot /var/www/
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem

</VirtualHost>

Reinicie o servidor (/etc/init.d/apache2 restart) e acesse o endereço “https://127.0.0.1” para testar a configuração. Ao conectar, o navegador exibe um aviso “O certificado do servidor falhou no teste de autenticidade” ou similar, o que é normal ao usar um certificado caseiro.

O CentOS não inclui o make-ssl-cert, mas inclui um outro script bastante prático, disponível dentro da pasta “/etc/pki/tls/certs”:

# cd /etc/pki/tls/certs

Uma vez dentro da pasta, use o comando “make” seguido pelo nome do arquivo que será gerado, como em:

# make apache.pem

Por default, a validade do certificado gerado pelo script será de 365 dias. Para usar outro valor, edite o arquivo “make-dummy-cert” dentro da pasta, substituindo o “-days 365” na quinta linha de baixo para cima pelo valor desejado antes de gerar o certificado.

Isso gerará o arquivo “/etc/pki/tls/certs/apache.pem“, contendo o certificado. Para que ele seja usado, abra o arquivo “/etc/httpd/conf.d/ssl.conf” e localize a linha:

#SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt

Descomente-a e indique a localização do arquivo gerado, como em:

SSLCACertificateFile /etc/pki/tls/certs/apache.pem

A partir daí, você pode reiniciar o serviço httpd e testar a configuração acessando o endereço “https://servidor”.

Diferente do Debian, não é necessário adicionar a linha “Listen 443″ na configuração do Apache, pois a linha faz parte do arquivo “/etc/httpd/conf.d/ssl.conf”, que é criado automaticamente ao instalar o pacote mod_ssl. Dentro do arquivo, você encontra as linhas:

# When we also provide SSL we have to listen to the
# the HTTPS port in addition.
#
Listen 443

Em outras distribuições, você pode usar diretamente o openssl para gerar o certificado. Nesse caso, o comando é maior, já que precisamos especificar manualmente um volume maior de parâmetros. Scripts como o make-ssl-cert são desenvolvidos justamente para tornar a geração do certificado mais simples.

# openssl req -new -x509 -days 1095 -sha1 -newkey rsa:1024 -nodes \
-keyout server.key -out meuservidor.csr

Este comando gera dois arquivos separados, o “server.key”, que contém a chave criptográfica e o “meuservidor.csr”, que contém o certificado que será fornecido aos clientes. Estes dois arquivos tem a mesma função do arquivo “.pem” que é gerado pelos scripts do Debian e do CentOS, apenas desmembrado em dois arquivos separados. Para usá-los, você precisa apenas adicionar duas linhas separadas dentro do arquivo de configuração principal do Apache (“/etc/apache2/httpd.conf” no caso do Debian ou “/etc/httpd/conf/httpd.conf”, no caso do CentOS), especificando as localizações dos dois arquivos:

SSLCertificateFile /etc/apache2/ssl/meuservidor.csr
SSLCertificateKeyFile /etc/apache2/ssl/server.key

Não esqueça de ativar o mod_ssl e incluir a linha “Listen 443” na configuração do Apache, para que ele passe a escutar a porta do SSL. Certifique-se também de que a porta 443 está aberta na configuração do firewall.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X