Protegendo servidor Apache

Referencia: Dicas de TI

O objetivo deste post é mostrar como proteger as informações confidenciais (ex: login/senha) das aplicações WEB que rodam na sua intranet. Não é necessário comprar um Certificado (ex: verisign.com ou godaddy.com), basta instruir os usuários de como proceder na primeira conexão.

Pré-requisitos:

Sistema Operacional Linux (não testei em outros sistemas), Apache 2 com mod_ssl, OpenSSL e Mod Rewrite…

Passo1: Geração do certificado

Neste passo dois arquivos serão gerados (.key e o .csr).  Cuide MUITO BEM deste arquivo .key, ele é a chave privada da segurança do seu servidor. Coloque permissão somente leirura para o usuário root (chmod 400 dominio.com.key). Já o arquivo CSR (Certificate Signing Reques), contém as informações do certificado (Empresa, Estado, etc.) e, também, a chave pública do certificado.

# openssl req -nodes -newkey rsa:2048 -keyout dominio.com.key -out  dominio.com.csr

A partir dos arquivos gerados, será criado o arquivo do certificado dominio.com.crt:

# openssl x509 -in cdominio.com.csr -out dominio.com.crt -req -signkeydominio.com.key -days 365

Pronto, seu certificado está gerado!!!

Passo 2: Configuração do apache

É necessário configurar o certificado gerado para o domínio virtual em questão. Dentro do <VirtualHost *:443> (ou algo semelhante),  adicione a configuração do certificado:

SSLEngine  on
SSLCertificateFile /root/certificados/dominio.com.crt
SSLCertificateKeyFile /root/certificados/dominio.com.key

Verifique as configuracoes com o comando apache2ctl configtest e depois reinicie o servidor. Pronto, você já pode testar:

https://dominio.com

Passo 3: Obrigar conexão segura (HTTPS) para acessar algumas URIs

Muitas vezes você não quer que todo o site fique protegido. Para estes e outros casos, você pode utilizar o mod_rewrite do apache. Vamos para uma configuração simples do apache para as necessidades (por exemplo) do wordpress.

Neste caso, você quer que os usuários acessem o blog utilizando uma conexão normal (não criptografada), porém, ao acessar a área privada, o usuário é obrigado a acessar por via segura (https), protegendo seus dados.

Relembrando, a configuraçao do domínio virtual tem duas entradas, uma para a porta 80 (<VirtualHost *:80> e outra para a porta padrão doHTTPS, a 443 (<VirtualHost *:443>). Precisamos fazer duas configurações: A primeira, deve fazer com que sempre que um usuário acessar wp-admin ou wp-login seja remetido para uma conexão segura. Isso será feiro na porta 80. A segunda configuração, por sua vez, deve ser configurada na porta 443, onde obrigamos o usuário acesssar as páginas não-privadas utilizando uma conexão HTTP normal, não criptografada. Seguem as duas configurações:

<VirtualHost *:80>

ServerName dominio.com

rewriteEngine On
rewriteRule ^/(.*)(wp-admin|wp-login)(.*)$ https://dominio.com/$1$2$3 [R=301,L]
</VirtualHost>

<VirtualHost *:80>

ServerName dominio.com

SSLEngine  on
SSLCertificateFile /root/certificados/dominio.com.crt

SSLCertificateKeyFile /root/certificados/dominio.com.key

rewriteEngine On
rewriteCond %{REQUEST_URI} !^/(.*)(wp-admin|wp-login)(.*)|(.*\.js.*)|(.*\.css.*)$
rewriteRule ^/(.*)$ http://dominio.com/$1 [R=301,L]
</VirtualHost>

Pronto, seu servidor está configurado para aceitar conexoes seguras e forçar com que os usuários utilizem o HTTPS somente nos locais que você definir.

Anúncios

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s