Configuração de Servidor Web Seguro com SSL/TLS no Apache

Classificado em Computação

Escrito em em português com um tamanho de 6,86 KB

1. Servidor Web Seguro

Nesta aula apresentaremos os procedimentos básicos para a configuração de um servidor de páginas Web seguro. Isto corresponde a instalar dispositivos de segurança no servidor para criar conexões seguras. Estas conexões seguras são muito úteis para serviços Web como home banking, comércio eletrônico, intranets, servidores de correio, etc.

A ferramenta mais comum dos sites seguros é o SSL/TLS. O SSL (Secure Sockets Layer), renomeado pelo IETF como TLS (Transport Layer Security). O TLS está documentado na RFC 2246 para versão 1.0, e a versão 1.1 aprovada na RFC 4346. O SSL está na versão 3.1.

Desenvolvido pela Netscape, o SSL é utilizado extensivamente pelos navegadores Web para prover transferências de dados seguras em diversas aplicações. Um servidor HTTP protegido com SSL utiliza a porta 443 para transferir dados (em substituição da porta 80, normal do HTTP), e é identificada com uma URL especial - https.

Segurança Baseada em Criptografia

A segurança do SSL é baseada em criptografia. Quando uma sessão SSL é estabelecida, o servidor entrega uma chave pública para o cliente. O cliente gera uma chave simétrica de forma randômica, de acordo com o PKCS#1, criptografa a mesma com a chave pública, e envia o resultado para o servidor. Somente o servidor, com sua chave privada, é capaz de decodificar a informação para determinar a chave simétrica original. Estes bytes secretos são agora utilizados para encriptar o resto da sessão. Na figura 01 temos uma representação de um servidor de páginas Web seguro com SSL/TLS.

Softwares de Suporte a SSL/TLS

  • OpenSSL: um programa livre (e muito popular, com licença BSD)
  • GnuTLS: um programa para implementação livre.
  • JSSE: uma implementação Java incluída no Java Runtime Environment.

2. Autenticação Mútua

Na figura 2 temos uma representação da autenticação mútua entre cliente/servidor com SSL.

Autenticação do Servidor

O SSL permite ao usuário confirmar a identidade do servidor. Um cliente SSL-enable pode usar técnicas padrões de criptografia por chave pública para verificar que o certificado do servidor e a chave pública são válidos e foram verificados por uma Autoridade Certificadora (CA).

Autenticação do Cliente

O SSL permite ao servidor identificar a identidade do cliente. O servidor pode verificar a identidade de qualquer cliente que tenha um certificado emitido por uma CA que esteja na sua lista de CAs confiáveis.

Após a fase de autenticação, a mensagem pode ser trocada entre o cliente e o servidor através de um canal seguro. O SSL garante:

  • Confidencialidade e Proteção contra Tampering (alteração dos dados em trânsito).

3. Configuração do Apache

Os arquivos de configuração mais comuns para ativar o SST/TLS no servidor Apache (isto pode variar conforme a distribuição) estão dentro do diretório /etc/apache2/. Considerando o servidor Apache2 (versão 2.2.12-1ubuntu2.2) e o OpenSSL (versão 0.9.8g-16ubuntu3.1), faremos a configuração do SSL/TLS com a criação de um certificado digital para um host virtual atender às requisições Web negociando uma sessão segura.

Os programas e arquivos a serem utilizados na configuração são os seguintes:

  • /etc/apache2/ (diretório raiz do apache2)
  • /etc/apache2/apache2.conf
  • /etc/apache2/httpd.conf
  • /etc/apache2/ports.conf
  • /etc/apache2/mods-available
  • /etc/apache2/mods-enabled
  • /etc/apache2/sites-available
  • /etc/apache2/sites-enabled
  • /usr/sbin/apache2
  • /usr/sbin/apache2ctl
  • /usr/bin/openssl

Quando a instalação do Apache2 é feita juntamente com a instalação do OpenSSL, usando entre os parâmetros do configure a opção --enable-ssl, a maioria das configurações já vêm prontas nos seus respectivos arquivos. No nosso caso (que é o caso mais trabalhoso) as instalações foram feitas separadamente, portanto faremos todos os passos necessários para ativar o SSL/TLS.

No arquivo apache2.conf, certifique-se que existem as seguintes inclusões:

  • /etc/apache2/sites-enabled

Crie o diretório /etc/apache2/ssl. Dentro deste diretório vamos fazer a criação da chave de criptografia:

Criação da Chave

Para criar a chave:

# openssl req -new > new.cert.csr

Nessa parte, informe uma senha ou frase para que seja criado esse arquivo. Depois, repita novamente respondendo as perguntas que forem surgindo. O próximo comando é:

# openssl rsa -in privkey.pem -out new.cert.key

Aqui será preciso informar a senha ou frase que foi adicionada no primeiro comando acima.

# openssl x509 -in new.cert.csr out new.cert.cert -req -signkey new.cert.key -days 1825

Pronto, agora foram criados os arquivos. É preciso renomeá-los:

# cp new.cert.cert server.crt
# cp new.cert.key server.key

Para indicar ao SSL/TLS onde ficarão as chaves para a criação da conexão segura, devemos editar o arquivo de configuração do VirtualHost em /etc/apache2/sites-available/default-ssl. Editar as linhas:

SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

Antes de salvar e sair, edite as opções do SSL na parte do arquivo default-ssl onde está a configuração do virtual host:

  • DocumentRoot /var/www/privado/
  • ServerName www.example.com:443
  • ServerAdmin [email protected]
  • #RedirectPermanent / https://www.example.com
  • #UseCanonicalName Off
  • ErrorLog /var/log/apache2/logs/error_log
  • TransferLog /var/log/apache2/logs/access_log

Detalhes Finais

  • Criar o link do arquivo default-ssl para o caminho /etc/apache2/sites-enabled/default-ssl.
  • Confirmar se existem os arquivos dentro de /etc/apache2/mods-available/ssl.conf e ssl.load.
  • Confirmar se existem os links para os arquivos ssl.conf e ssl.load dentro de /etc/apache2/modsenabled/.

Depois disso, estará tudo pronto. É preciso parar e iniciar o Apache novamente com o SSL:

# service apache2 start ou
# /usr/sbin apache2ctl start

Entradas relacionadas: