Configurando o Protocolo SSL (TLS)
Utilize o FileZilla para copiar o arquivo mydomain.key que foi gerado na página Gerando Chaves e o arquivo mydomain.crt obtido em Como Comprar um CRT ? para a pasta /home/ubuntu. Depois copie os arquivos para a pasta /usr/local/apache2/conf, utilizando o comando:
$ sudo mv mydomain.* /usr/local/apache2/conf
OBS: O FileZilla somente pode copiar os arquivos diretamente para a pasta /usr/local/apache2/conf caso esteja logado como usuário root.
O arquivo utilizado na configuração da comunicação criptografada no Apache é denominado httpd-ssl.conf
Para abrir o arquivo httpd-ssl.conf para edição:
$ sudo nano /usr/local/apache2/conf/extra/httpd-ssl.conf
As principais diretivas utilizadas na configuração do protocolo SSL/TLS são:
Listen 443
# Speed-optimized SSL Cipher configuration:
SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5
SSLHonorCipherOrder on
# Pass Phrase Dialog:
SSLPassPhraseDialog builtin
# Inter-Process Session Cache:
SSLSessionCache "shmcb:/usr/local/apache2/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
##
## SSL Virtual Host Context
##
<VirtualHost _default_:443>
# General setup for the virtual host
DocumentRoot "/usr/local/apache2/htdocs/mysite"
ServerName mydomain.com:443
ServerAdmin fulano@gmail.com
ErrorLog "/usr/local/apache2/logs/error_log"
TransferLog "/usr/local/apache2/logs/access_log"
SSLEngine on
SSLCertificateFile "/usr/local/apache2/conf/mydomain.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/mydomain.key"
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/apache2/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
<Directory "/usr/local/apache2/htdocs/mysite">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Require all granted
</Directory>
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog "/usr/local/apache2/logs/ssl_request_log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
Reinicializar o Apache:
$ sudo /usr/local/apache2/bin/apachectl restart
$ sudo /usr/local/apache2/bin/apachectl status
Informações sobre as diretivas:
Listen 443 #Porta padrão HTTPS
SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5
A diretiva SSLCipherSuite especifica um conjunto de algorítmos (Cipher Suite) disponível para negociação durante o handshake SSL/TLS.
A especificação de cifra RC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5 configura uma criptografia de dificuldade média. Criptografias fracas comprometem a segurança e fortes exigem muito recurso de CPU.
SSLHonorCipherOrder on
Na escolha de uma cifra durante um handshake SSLv3 ou TLSv1, normalmente a preferência do navegador do cliente é usada. No entanto, se essa diretiva estiver habilitada (SSLHonorCipherOrder on), a preferência do servidor será usada.
SSLPassPhraseDialog builtin
Quando o Apache é inicializado, deve ler os vários arquivos de certificado (consulte SSLCertificateFile) e Chave privada (consulte SSLCertificateKeyFile) dos servidores virtuais habilitados para SSL. Como, por razões de segurança, os arquivos de chave privada são geralmente criptografados, o mod_ssl precisa consultar o administrador sobre uma senha para descriptografar esses arquivos. Esta consulta pode ser feita de duas maneiras que podem ser configuradas por tipo:
O modo builtin é o padrão. Como muitos hosts virtuais habilitados para SSL/TLS podem ser configurados, no momento em que um arquivo de chave privada criptografado é encontrado, uma caixa de diálogo irá surgir solicitando a senha ao adminstrador. Caso a senha seja a correta, ela será lembrada caso outro servidor virtual contenha uma chave privada criptografada e, talvez, possa ser reutilizada. Caso não seja a correta, uma nova caixa de diálogo irá surgir, solicitando uma nova senha.
OBS: Nos exemplos apresentados nesse tutorial, as chaves privadas não estão criptografadas.
SSLSessionCache memcache:localhost:11211
Antes do navegador solicitar ao servidor uma página que contém texto, figuras, entre outros dados, pe necessário realizar o handshake. Clientes modernos (navegadores atuais) podem solicitar essas informações de modo paralelo para poderem visualiza o conteúdo mais rápido. Para evitar que o servidor realize vários handshakes (que consiste em um processo demorado) para enviar cada informação pedida, utilza-se a diretiva SSLSessionCache para que o servidor configure um cache para acelerar o processamento de solicitações paralelas.
Um cache entre processos ajuda a evitar handshakes de sessão desnecessários, pois mantém a conexão ativa (via HTTP keep-alive). Assim, quando o servidor recebe várias solicitações paralelas para o mesmo processo, atende as solicitações com menos esforço de CPU e consumo de memória.
SSLSessionCacheTimeout 300
Esta diretiva define o tempo limite em segundos para: informações armazenadas no cache de sessão SSL global/entre processos, cache de memória interna OpenSSL e para as sessões retomadas pela retomada da sessão TLS (RFC 5077). O tempo mínimo é de 15 segundos, porém, somente para testes. Para operação normal, deve ser definido para valores mais altos. O valor padrão é de 300 segundos.
<VirtualHost _default_:443>
Inicia uma seção de host virtual na porta 443
SSLEngine on
Esta diretiva deve ser usada dentro de uma seção <VirtualHost _default_:443> para habilitar ou desabilitar o mecanismo do protocolo SSL/TLS. Por padrão, o mecanismo de protocolo SSL/TLS está desabilitado para o servidor principal e todos os hosts virtuais configurados.
DocumentRoot "/usr/local/apache2/htdocs/mysite"
Esta diretiva informa ao Apache que os arquivos do site estão na pasta mysite e o caminho para encontrá-la
ServerName mydomain.com:443
Quando um navegador realiza uma requisição HTTP ao servidor, ele verifica se a informação de host que ela contém é igual a informada em ServerName.
ServerAdmin fulano@mydomain.com
ServerAdmin define o endereço de contato que o servidor inclui em qualquer mensagem de erro que retorna ao cliente.
ErrorLog "/usr/local/apache2/logs/error_log"
A diretiva ErrorLog define a localização e o nome do arquivo de log, isto é, o arquivo onde os erros que ocorrerem no servidor serão gravados. É o local onde o Apache httpd enviará informações de diagnóstico e registrará quaisquer erros que encontrar nas solicitações de processamento. É o primeiro lugar a olhar quando ocorre um problema ao iniciar o servidor ou ao funcionamento do servidor, pois muitas vezes contém detalhes sobre o que deu errado e como corrigi-lo.
O log de erros geralmente é gravado em um arquivo (normalmente error_log em sistemas Unix e error.log no Windows e OS/2).
TransferLog "/usr/local/apache2/logs/access_log"
TransferLog especifica o arquivo no qual armazenar o log de acessos ao site. Se não estiver explicitamente incluído no arquivo de configuração, nenhum log será gerado. Tanto a requisição a uma página quanto cada elemento que ela contém, fica registrado no arquivo de log de acesso (asses_log).
Exemplo:
Um navegador, que está sendo executado em uma máquina com ip 164.163.214.61, acessou uma página que possui várias figuras, em 26/Feb/2021:07:06:06 +0000, hospedada em um servidor Apache, denominada buy_crt.html.
O acesso gerou o seguinte log de acesso no arquivo acess_log:
164.163.214.61 -- [26/Feb/2021:07:06:06 +0000] "GET /apache/buy_crt.html HTTP/1.1" 200 12264
164.163.214.61 -- [26/Feb/2021:07:06:06 +0000] "GET /apache/images/dynadot_ssl_inicial.png HTTP/1.1" 200 247322
164.163.214.61 -- [26/Feb/2021:07:06:06 +0000] "GET /apache/images/ssl_regular.png HTTP/1.1" 200 46821
164.163.214.61 -- [26/Feb/2021:07:06:06 +0000] "GET /apache/images/dynadot_csr_empty.png HTTP/1.1" 200 30967
164.163.214.61 -- [26/Feb/2021:07:06:06 +0000] "GET /apache/images/Notepad_CSR.png HTTP/1.1" 200 132283
164.163.214.61 -- [26/Feb/2021:07:06:06 +0000] "GET /apache/images/dynadot_csr_full.png HTTP/1.1" 200 89091
164.163.214.61 -- [26/Feb/2021:07:06:06 +0000] "GET /apache/images/dynadot_csr_review.png HTTP/1.1" 200 64405
164.163.214.61 -- [26/Feb/2021:07:06:06 +0000] "GET /apache/images/meu_ssl.png HTTP/1.1" 200 5449
164.163.214.61 -- [26/Feb/2021:07:06:06 +0000] "GET /apache/images/status_do_pedido.png HTTP/1.1" 404 196
164.163.214.61 -- [26/Feb/2021:07:06:06 +0000] "GET /apache/images/he.png HTTP/1.1" 200 63273
164.163.214.61 -- [26/Feb/2021:07:06:06 +0000] "GET /apache/images/he_txt_record.png HTTP/1.1" 200 99685
164.163.214.61 -- [26/Feb/2021:07:06:07 +0000] "GET /apache/images/certificate_code.png HTTP/1.1" 404 196
Para obter informações mais detalhadas, consulte Apache Module mod_ssl