Configurando o Protocolo SSL (TLS)
Para editar o aquivo httpd-ssl.conf, utilize o comando:
$ sudo nano /usr/local/apache2/conf/extra/httpd-ssl.conf
Observe as configurações do arquivo httpd-ssl.conf exemplo e realize as configurações necessárias no arquivo httpd-ssl.conf do servidor Apache.
Ou selecione as diretivas desejadas com o mouse e as copie pressionando as teclas <CTRL> + <C>. Para colar na shell session, no arquivo aberto pelo nano, pressione as teclas <SHIFT> + <INSERT>
Exemplo:
Esse exemplo tem como objetivo chamar a atenção para as linhas 18, 30, 31, 37, 44, 45, 50 e de 53 até 84, pois são configurações importantes para a operação do SSL/TLS. #
# This is the Apache server configuration file providing SSL support.
# It contains the configuration directives to instruct the server how to
# serve pages over an https connection. For detailed information about these
# directives see <URL:http://httpd.apache.org/docs/2.4/mod/mod_ssl.html>
#
# Do NOT simply read the instructions in here without understanding
# what they do. They are here only as hints or reminders. If you are unsure
# consult the online docs. You have been warned.
#
# Required modules: mod_log_config, mod_setenvif, mod_ssl,
# socache_shmcb_module (for default value of SSLSessionCache)
#
# When we also provide SSL we have to listen to the
# standard HTTP port (see above) and to the HTTPS port
#
Listen 443
# Speed-optimized SSL Cipher configuration:
# If speed is your main concern (on busy HTTPS servers e.g.),
# you might want to force clients to specific, performance
# optimized ciphers. In this case, prepend those ciphers
# to the SSLCipherSuite list, and enable SSLHonorCipherOrder.
# Caveat: by giving precedence to RC4-SHA and AES128-SHA
# (as in the example below), most connections will no longer
# have perfect forward secrecy - if the server key is
# compromised, captures of past or future traffic must be
# considered compromised, too.
SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5
SSLHonorCipherOrder on
# Pass Phrase Dialog:
# Configure the pass phrase gathering process.
# The filtering dialog program (builtin is an internal
# terminal dialog) has to provide the pass phrase on stdout.
SSLPassPhraseDialog builtin
# Inter-Process Session Cache:
# Configure the SSL Session Cache: First the mechanism
# to use and second the expiring timeout (in seconds).
#SSLSessionCache "dbm:/usr/local/apache2/logs/ssl_scache"
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>
Diretivas do arquivo httpd-ssl.conf
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