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:443ServerAdmin [email protected]#RedirectPermanent / https://www.example.com#UseCanonicalName OffErrorLog /var/log/apache2/logs/error_logTransferLog /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.confessl.load. - Confirmar se existem os links para os arquivos
ssl.confessl.loaddentro 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