1.13. Como configurar o apache usando SSL?

Em muitos casos precisamos de uma conexão segura à páginas na internet, por isso é interessante configurar o apache para que use o protocolo de acesso seguro (ssl).

Abaixo segue um procedimento passo a passo de como gerar um certificado para que o apache de sua máquina passe a usar ssl.

Para efetuar tal configuração será necessário ter instaldo em seu equipamento os pacotes abaixo:

    apache
    openssl
    openssl-progs


Para verificar se os pacotes estão instalados use os comandos abaixo em um terminal e logado como root:

     [root@localhost]# rpm -qa | grep apache


     [root@localhost]# rpm -qa | grep ssl


Se um dos comandos acima apenas "pular" de linha sem retornar nada significa que os pacotes não estão instalados.

Para instalar os pacotes necessários pode-se usar o apt-get.

     [root@localhost]# apt-get install apache openssl openss-progs


Iniciando o processo de configuração

Primeiramente edite o arquivo de configuração do ssl no apache, que é o /etc/apache/conf/ssl.conf , para isso use o comando abaixo:

     [root@localhost]# mcedit /etc/apache/conf/ssl.conf


Procure pela entrada abaixo:

    #   SSL Engine Switch:
    #   Enable/Disable SSL for this virtual host.
    SSLEngine on


Verifique no seu arquivo se está igual a entrada acima. SSLEngine on significa que estamos habilitando o uso de ssl no apache.

Agora que já foi habilitado o uso de ssl é preciso fazer a configuração do servidor.

Localize mais acima no arquivo a seguinte entrada:

    <VirtualHost _default_:443>


Altere _default_ para o ip da sua máquina. Deverá ficar parecido com o exemplo:

    <VirtualHost 10.0.2.73:443>


É preciso alterar também as informações abaixo:

    #  General setup for the virtual host
    DocumentRoot "/srv/www/default/html"
    ServerName new.host.name:443
    ServerAdmin you@your.address
    ErrorLog /var/log/apache/error_log
    TransferLog /var/log/apache/access_log


Onde:

    DocumentRoot -> É onde estão armazenadas as páginas que o apache irá servir 
    ServerName   -> É o nome do seu servidor (hostname) 
    ServerAdmin  -> É o e-mail do administrador do servidor 
    ErrorLog     -> É onde serão armazenados os logs de erro
    TransferLog  -> É onde serão armazenados os logs de acesso


Alterando deve ficar parecido com o exemplo abaixo:

    DocumentRoot "/srv/www/default/html"
    ServerName bravo.conectiva:443
    ServerAdmin root@bravo
    ErrorLog /var/log/apache/error_log
    TransferLog /var/log/apache/access_log


Pressione F2 para salvar o arquivo e F10 para sair.

Inicie o apache para que ele gera a chave secreta do seu servidor.

     [root@localhost]# service apache start


Deverá resultar em algo como:

    Creating self-signed digital certificate, please wait...
    Generating a 1024 bit RSA private key
    ....++++++
    ..............++++++
    writing new private key to '/etc/apache/conf/ssl.key/server.key'
    -----
    Certificates generated successfully, proceeding to normal startup...
    PLEASE REMEMBER THAT THIS IS A DUMMY CERTIFICATE AND SHOULD ONLY BE
    USED FOR TESTING PURPOSES!


Se não apareceu essa mensagem é porque provavelmente já existia uma chave e um certificado na sua máquina, porém com as alterações feitas será necessário gera-los novamente.

Antes faça um backup dos arquivos antigos.

     [root@localhost]# cd /etc/apache/conf/ssl.key/


     [root@localhost]# mv server.key server.key.old


     [root@localhost]# cd /etc/apache/conf/ssl.crt/


     [root@localhost]# mv server.crt server.crt.old


Agora reinicie o apache com os comandos abaixo e verifique se finalmente obteve a resposta esperada.

     [root@localhost]# service apache stop


     [root@localhost]# service apache start


Agora que a chave foi criada é preciso gerar o certificado novamente. Gere-o usando o comando abaixo:

    [root@localhost]# openssl req -new -x509 -nodes -keyout /etc/apache/conf/ssl.key/server.key -out /etc/apache/conf/ssl.crt/server.crt


Ao executar esse comando será pedido para que informe alguns dados. Veja o exemplo abaixo:

    Generating a 1024 bit RSA private key
    .......................++++++
    ........................++++++
    writing new private key to '/etc/apache/conf/ssl.key/server.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:BR
    State or Province Name (full name) [Some-State]:Parana
    Locality Name (eg, city) []:Curitiba
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Conectiva SA
    Organizational Unit Name (eg, section) []:sup-cl
    Common Name (eg, YOUR name) []:Andre
    Email Address []:root@bravo


O certificado foi gerado, para testa-lo use o comando abaixo:

     [root@localhost]# openssl s_client -connect servidor.meudominio:443


Troque servidor.meudominio pelo nome do servidor em que foi efetuado todo o procedimento acima.

     [root@localhost]# openssl s_client -connect bravo.conectiva:443


Se a conexão for efetuada com sucesso será apresentada algumas mensagens na tela, dentre elas a que confirma o sucesso:

    ---
    SSL handshake has read 1260 bytes and written 340 bytes
    ---


Para testar através do navegador basta acessar o endereço do site criado com ssl utilizando a opção de https:

https://nome_do_servidor

Será mostrada uma tela pedindo a confirmação sobre a utilização do certificado.