O serviço de conexão segura SSL (Security Socket Layers) no Apache é responsável pelo módulo mod_ssl, que possibilita um nível de segurança em transações, muito comum em sistemas que utilizam a web. Solicitações seguras são realizadas pelo protocolo HTTPS (HyperText Transfer Protocol Secure) que utiliza a porta 443.
Inicialmente, é necessário gerar o certificado e enviar para análise junto à Autoridade Certificadora, sendo ele aprovado, o navegador aceitará a conexão como segura. Para gerar chaves privadas, geralmente se usa o openssl em ambientes Unix.
O openSSL é o Software Livre e de Código Aberto mais popular que possui robustez e competitividade comercial. Sendo ele uma ferramenta de linha de comando para utilizar as funções de criptografia, pode-se usá-lo para a criação de chaves privadas e públicas, operações de criptografia de chave pública, criações de certificado X,509, CSRs, CRLs, criptografia e descriptografia, dentre outros.
Para tornar um sistema propriamente seguro é necessário gerar dois arquivos: Um contendo as chaves privadas (arquivo.key) e outro com pedido de assinatura de certificado (arquivo.csr), os comandos abaixo se encarregam de fazer esse trabalho.
Comandos para gerar chave privada e pedido de certificado.
Gerar arquivo contendo a chave:
openssl genrsa -des3 -out www.gnu-lia.org.key 1024
...
Generating RSA private key, 1024 bit long modulus
........++++++
.....................................++++++
e is 65537 (0x10001)
Enter pass phrase for www.gnu-lia.org.key: Digite uma frase secreta
Comando para gerar pedido de certificado:
openssl req -new -key www.gnu-lia.org.key -out www.gnu-lia.org.csr
...
Enter pass phrase for www.gnu-lia.org.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]:
Minas Gerais
Locality Name (eg, city) []:
Minas Gerais
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
gnu-lia ltda
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:
www.gnu-lia.org
Email Address []:
cleysinhonv@gmail.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
uma senha
An optional company name []:.
A configuração do certificado no portal ou sistema web, pode ser elaborada no arquivo .htaccess, as principais diretivas de configuração são: SSLEngine, SSLCertificateFile e SSLCertificateKeyFile. Para validar o uso dessas diretivas é preciso habilitar o módulo mod_ssl.
a2enmod ssl && sudo /etc/init.d/apache2 force-reload
A diretiva SSLEngine habilita o uso do SSL. É importante lembrar que, por padrão, essa diretiva vem desabilitada. A opção SSLCertificateFile indica onde está o certificado assinado pela unidade certificadora, geralmente podendo armazená-lo no diretório onde está a aplicação web, em um diretório separado. Por fim, a opção SSLCertificateKeyFileque indica onde está a chave privada como mostra o exemplo abaixo.
<VirtualHost *:443>
ServerName cleysinhonv.gnu-lia.org
ServerAlias cleysinhonv.gnu-lia.org cleysinhonv
ServerAdmin cleysinhonv@gmail.com
DocumentRoot "/home/usuario/public_html"
ErrorLog /var/log/apache2/gnu-lia-error.log
logFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" gnu-lia
CustomLog /var/log/apache2/gnu-lia-error.log
RedirectMatch ^/$ www.gnu-lia.org/cleysinhonv
SSLEngine on
SSLCertificateFile /home/usuario/sistemas/ssl/www.gnu-lia.org.csr
SSLCertificateKeyFile /home/usuario/sistemas/ssl/www.gnu-lia.org.key
</VirtualHost>