Pesquisa de site

Série RHCE: Implementando HTTPS por meio de TLS usando Network Security Service (NSS) para Apache - Parte 8


Se você é um administrador de sistema responsável pela manutenção e segurança de um servidor web, não pode se dar ao luxo de não dedicar seus melhores esforços para garantir que os dados servidos ou que passam por seu servidor estejam sempre protegidos.

Para fornecer comunicações mais seguras entre clientes e servidores web, o protocolo HTTPS nasceu como uma combinação de HTTP e SSL ( Secure Sockets Layer) ou mais recentemente, TLS (Transport Layer Security).

Devido a algumas violações graves de segurança, o SSL foi descontinuado em favor do TLS mais robusto. Por esse motivo, neste artigo explicaremos como proteger as conexões entre seu servidor web e clientes usando TLS.

Este tutorial pressupõe que você já instalou e configurou seu servidor web Apache. Caso contrário, consulte o seguinte artigo neste site antes de prosseguir.

  1. Instale LAMP (Linux, MySQL/MariaDB, Apache e PHP) no RHEL/CentOS 7

Instalação de OpenSSL e utilitários

Primeiro, certifique-se de que o Apache esteja em execução e que tanto http quanto https sejam permitidos através do firewall:


systemctl start http
systemctl enable http
firewall-cmd --permanent –-add-service=http
firewall-cmd --permanent –-add-service=https

Em seguida instale os pacotes necessários:


yum update && yum install openssl mod_nss crypto-utils

Importante: Observe que você pode substituir mod_nss por mod_ssl no comando acima se quiser usar Bibliotecas OpenSSL em vez de NSS (Serviço de Segurança de Rede) para implementar TLS (qual delas usar depende inteiramente de você , mas usaremos NSS neste artigo porque é mais robusto; por exemplo, ele suporta padrões de criptografia recentes, como PKCS #11).

Por fim, desinstale o mod_ssl se você optar por usar o mod_nss ou vice-versa.


yum remove mod_ssl

Configurando NSS (serviço de segurança de rede)

Após a instalação do mod_nss, seu arquivo de configuração padrão é criado como /etc/httpd/conf.d/nss.conf. Você deve então certificar-se de que todas as diretivas Listen e VirtualHost apontam para a porta 443 (porta padrão para HTTPS):


Listen 443
VirtualHost _default_:443

Em seguida, reinicie o Apache e verifique se o módulo mod_nss foi carregado:


apachectl restart
httpd -M | grep nss

A seguir, as seguintes edições devem ser feitas no arquivo de configuração /etc/httpd/conf.d/nss.conf:

1. Indique o diretório do banco de dados NSS. Você pode usar o diretório padrão ou criar um novo. Neste tutorial usaremos o padrão:


NSSCertificateDatabase /etc/httpd/alias

2. Evite a entrada manual da senha em cada inicialização do sistema salvando a senha no diretório do banco de dados em /etc/httpd/nss-db-password.conf:


NSSPassPhraseDialog file:/etc/httpd/nss-db-password.conf

Onde /etc/httpd/nss-db-password.conf contém APENAS a seguinte linha e mypassword é a senha que você definirá posteriormente para o banco de dados NSS:


internal:mypassword

Além disso, suas permissões e propriedade devem ser definidas como 0640 e root:apache, respectivamente:


chmod 640 /etc/httpd/nss-db-password.conf
chgrp apache /etc/httpd/nss-db-password.conf

3. A Red Hat recomenda desabilitar o SSL e todas as versões do TLS anteriores ao TLSv1.0 devido ao TLS Vulnerabilidade >POODLE SSLv3 (mais informações aqui).

Certifique-se de que cada instância da diretiva NSSProtocol seja a seguinte (é provável que você encontre apenas uma se não estiver hospedando outros hosts virtuais):


NSSProtocol TLSv1.0,TLSv1.1

4. O Apache se recusará a reiniciar, pois este é um certificado autoassinado e não reconhecerá o emissor como válido. Por este motivo, neste caso específico deverá adicionar:


NSSEnforceValidCerts off

5. Embora não seja estritamente obrigatório, é importante definir uma senha para o banco de dados NSS:


certutil -W -d /etc/httpd/alias