Como configurar SSL/TLS com Apache HTTPD no Red Hat

Como configurar SSL/TLS com Apache HTTPD no Red Hat

Objetivo

O objetivo é configurar o Apache WebServer com suporte SSL/TLS no Red Hat Linux, usando os pacotes enviados com a distribuição.

Sistema operacional e versões de software

  • Sistema operacional: Red Hat Enterprise Linux 7.5
  • Programas: Apache httpd, mod_ssl

Requisitos

Acesso privilegiado ao servidor da web.

Dificuldade

FÁCIL

Convenções

  • # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando
  • $ - dados os comandos do Linux a serem executados como um usuário não privilegiado regular

Introdução

A instalação de um servidor da web é bastante fácil em distribuições modernas, pois os casos de uso de um servidor da web são tão comuns que a maioria, senão todas as distribuições, fornecem pacotes em seus repositórios. Apache HTTPD é um servidor da web confiável usado por uma grande parte da Internet, e muitos módulos estão disponíveis para estender sua funcionalidade.

Atualmente, as notícias da tecnologia estão cheias de violações de segurança, roubo/vazamento de dados e um desejo crescente de usar criptografia
onde é possível. Embora o uso do HTTPS tenha uma certa sobrecarga de computação no lado do servidor e do cliente, não usá -lo significa que todos os dados enviados em ambas as direções são o texto claro, legível por qualquer pessoa que possa ler o tráfego enquanto passa pela rede.

Suponha que você tenha um serviço da web em que os clientes possam fazer login usando seu nome de usuário e senha - um método de autenticação comum - para alcançar seus próprios dados, incluindo os administradores do site. Se você fornecer esse serviço sobre o HTTP, todas essas informações podem ser gravadas, para que alguém possa obter todas as credenciais de login, efetuar login como administrador do site e bloquear os Administradores Reais ou publicar conteúdo prejudicial aos visitantes.

A capacidade de usar criptografia enquanto a navegação é incorporada a todos os principais navegadores modernos por um longo tempo, e da mesma maneira que a criptografia está disponível para servidores da web por muitos anos agora.



Instale o Apache WebServer com suporte SSL/TLS

Para instalar os pacotes necessários, basta executar como root:

# yum instalar httpd mod_ssl -y

Se o servidor já tiver httpd instalado, você só precisa instalar mod_ssl, Toda a configuração necessária é feita
pelo instalador. Observe, no entanto, que, neste caso, você precisa reiniciar o HTTPD, para que ele possa carregar o módulo SSL. Usando
Os pacotes enviados com a distribuição, podemos facilitar a vida, pois o Red Hat fornecerá atualizações devidamente testadas para o sistema operacional e para o servidor da web, é claro, você precisa de uma assinatura para receber as atualizações - mas são necessárias atualizações para o sistema operacional de qualquer maneira para se manter atualizado.

Ativar e iniciar o servidor HTTPD

Usando o Systemd, você pode ativar e iniciar o servidor da web com o comando abaixo:

# SystemCtl Ativar httpd && SystemCtl Iniciar httpd

Dessa forma, o serviço httpd será iniciado automaticamente pelo Systemd em cada inicialização.

Verifique a instalação e o status

Você pode verificar o status do servidor da web usando o Systemd:

# status Systemctl httpd -l ● httpd.Serviço - o servidor Apache HTTP carregado: carregado (/usr/lib/systemd/system/httpd.serviço; habilitado; Preset do fornecedor: desativado) Ativo: ativo (em execução) desde o sábado 2018-07-07 21:35:33 CEST; 1 semana, 4 dias atrás, documentos: homem: httpd (8) homem: apachectl (8) PID principal: 1292 (httpd) status: "Total de solicitações: 0; solicitações atuais/s: 0; tráfego atual: 0 b/s" tarefas " : 9 CGROUP: /sistema.Slice/httpd.service ├─ 1292 /usr/sbin/httpd -DFOREGROUND ├─13271 /usr/sbin/httpd -DFOREGROUND ├─13272 /usr/sbin/httpd -DFOREGROUND ├─13273 /usr/sbin/httpd -DFOREGROUND ├─27508 /usr /sbin/httpd -dforeground ├─27509/usr/sbin/httpd -dforeground ├─27510/usr/sbin/httpd -dforeground ├—27511/usr/sbin/httpd -dForeground └27512/usr/sbin/httpd -dForeground └td -27512/usr/httpin -dforeground └td -27512/usr/httpd -dforeground └td -27512/usr/httpd -dforeground └td -27512/usr/sbin/httpd -dformground └td -27512/usr/httpd -dforeground └td -27512/usr/httpd -dforegrina 07 de julho 21:35:32 web.Foobar.com Systemd [1]: Iniciando o servidor HTTP Apache… . 07 de julho 21:35:33 web.Foobar.com Systemd [1]: iniciou o servidor HTTP Apache. 
cópia de

Para verificar se o MOD_SSL está instalado corretamente:

# rpm -q mod_ssl mod_ssl -2.4.6-80.EL7.x86_64 
cópia de

E é carregado como um módulo no servidor HTTPD:

# apachectl -m | Grep ssl ssl_module (compartilhado) 
cópia de

Uso do certificado

Quando instalamos o pacote MOD_SSL, o módulo se adiciona ao servidor HTTPD, para que o carregue na próxima inicialização.
Um certificado autoassinado é gerado por padrão, que é usado para estabelecer uma conexão criptografada com o navegador.
Abra um navegador e aponte para o servidor sobre HTTPS:

Mensagem de erro SSL no navegador Firefox

Vamos ignorar isso por enquanto, adicione a exceção de segurança (não defina "armazenar permanentemente esta exceção") e continue. A página padrão é exibida. Em caso de Red Hat, isso se parece o seguinte:

Página inicial padrão de uma instalação de Web Httpd no Red Hat Linux

Observe o ponto de exclamação ao lado do URL (outros navegadores podem mostrar um aviso diferente).

Nosso servidor da web agora está em funcionamento e atropelando o HTTPS com um certificado autoassinado e pronto para servir o conteúdo publicado
sob /var/www/html, A raiz de conteúdo padrão do servidor da web no Red Hat.

A conexão entre o servidor da web e o navegador agora está criptografada, por isso é mais difícil falsificar o tráfego (que
pode ser usado, por exemplo, roubar credenciais de login). Terminamos? De certa forma, completamos nosso objetivo.

O fato de nosso navegador não conseguir identificar o certificado do servidor como válido não o impede de usar a comunicação criptografada com o servidor, se decidirmos explicitamente que confiamos neste certificado. Isso pode ser adequado para um sistema pequeno (doméstico), onde você tem apenas alguns usuários, bem como apenas alguns servidores da web - você precisa aceitar o certificado autoassinado em navegadores que devem ser clientes dos servidores da web e qualquer outro navegador no mundo nunca deve ver o conteúdo fornecido por esses servidores.

Observe, no entanto, que este certificado autoassinado expirará no tempo (como qualquer outro certificado deve) e você terá
para renová -lo para usá -lo. Os certificados expirados são considerados inválidos pelos navegadores, da mesma maneira que os certificados que não podem ser comprovados como válidos por uma cadeia de certificados válidos acima deles.

Para descobrir quando o certificado autoassinado (ou qualquer outro) expirará, precisamos encontrá-lo no sistema de arquivos consultando o arquivo de configuração do módulo SSL:

# grep sslCertificatefile/etc/httpd/conf.d/ssl.conf | Grep -v "#" SSLCERtificateFile/etc/pki/tls/certs/localhost.Crt 
cópia de

E então use o OpenSSL para obter a data de validade:

# OpenSSL x509 -nddate -noout -in/etc/pki/tls/certs/localhost.CRT NotAfter = 10 de julho 07:06:17 2019 GMT 
cópia de

Depois (ou melhor, antes) o certificado expirar, você deve renová -lo ou substituí -lo por um certificado que os clientes confiam. A
Abordagem mais elegante em contraste com os certificados auto-autentados está solicitando e usando um certificado de uma CA
(Autoridade de Certificação) Seus clientes já confiam, seja do seu CA interno (que por sua vez pode ter um globalmente
Raiz de confiança CA acima dela), ou diretamente de uma CA de fundo global.

Para usar o certificado obtido em vez do padrão, os parâmetros abaixo devem apontar para o arquivo de certificado, o
Chave de certificado e o certificado da CA que assinou o certificado SSL, respectivamente. Os arquivos devem ser copiados em
O servidor da web, e deve ser legível pelo usuário do sistema operacional que executa o servidor da web - em caso de instalação padrão do Red Hat, o usuário do Apache. Esses parâmetros podem ser encontrados no mencionado acima ssl.conf.

SslCertificatefile/etc/httpd/custom-cert/server-ssl.CRT SSLCERtificateKeyFile/etc/httpd/Custom Cert/Server-SSL.chave sslcacertificatefile/etc/httpd/alfândega personalizada/ca.Crt 


Redirecionando o tráfego HTTP para HTTPS

Agora que servimos com https, podemos fazer cumprir o uso de https enquanto servem todo ou parte de nosso conteúdo. Na nossa
Por exemplo, estamos muito seguros e usamos HTTP apenas para redirecionar clientes recebidos para HTTPS.

Uma pergunta pode surgir, se quisermos falar apenas HTTPS, por que ouvimos HTTP? Suponha que um usuário final, que acabou de ouvir do nosso site, e obteve um URL de um amigo que não contém o protocolo. Até hoje, a maioria dos navegadores padrão é o protocolo HTTP, se não for especificado explicitamente. Se pararmos de servir o HTTP, o usuário digitando o URL sem https receberá uma mensagem de erro se seu navegador tentar alcançar nosso servidor sobre HTTP.

Para redirecionar todas as solicitações HTTP recebidas para HTTPS, criamos um arquivo em /etc/httpd/conf.d com um nome descritivo, digamos, Redirect_http.conf com o seguinte conteúdo (onde a web.Foobar.com é o nome DNS do site):

 Servidorname web.Foobar.com redirecionar permanente/https: // web.Foobar.coma  

E reinicie o servidor da web. Podemos testar se o redirecionamento funcionar corretamente a partir da linha de comando com WGET (de um host que confia no certificado SSL do servidor da web):

$ wget http: // web.Foobar.com/--2018-07-19 16: 13: 01-- http: // web.Foobar.web com/ resolução.Foobar.com (web.Foobar.com)… . 10.9.8.7 Conectando -se à Web.Foobar.com (web.Foobar.com) | 10.9.8.7 |: 80… . conectado. Solicitação HTTP enviada, aguardando resposta… . 301 movido permanentemente localização: https: // web.Foobar.com/[a seguir] --2018-07-19 16: 13: 01-- https: // web.Foobar.com/ conectando -se à web.Foobar.com (web.Foobar.com) | 10.9.8.7 |: 443… . conectado. Solicitação HTTP enviada, aguardando resposta… . 200 OK Comprimento: 240 [Texto/html] Salvando para: 'Índice.html '100%[================================================ =======================================>] 240 --.-K/S em 0s 2018-07-19 16:13:01 (7.04 MB/S) - 'ÍNDICE.HTML 'salvo [240/240] 
cópia de

A saída mostra a resposta HTTP 301, e podemos ver como nosso cliente WGET segue o redirecionamento para se conectar usando o protocolo HTTPS. Por padrão, o tráfego SSL é registrado em diferentes arquivos de log, o tráfego HTTP. Podemos encontrar o acima
solicitar logado /var/log/httpd/ssl_access_log:

10.9.8.8 - - [19/jul/2018: 16: 13: 01 +0200] "Get/http/1.1 "200 240

Conclusão

Com isso, concluímos nosso objetivo, criamos um servidor da web que usa HTTPS para falar com os clientes e redirecionar solicitações HTTP recebidas para HTTPs também.

Tutoriais do Linux relacionados:

  • Coisas para instalar no Ubuntu 20.04
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Download do Linux
  • Arquivos de configuração do Linux: os 30 primeiros mais importantes
  • Linux pode obter vírus? Explorando a vulnerabilidade do Linux…
  • Coisas para fazer depois de instalar o Ubuntu 22.04 Jellyfish…
  • Melhor distro Linux para desenvolvedores
  • Comandos Linux: os 20 comandos mais importantes que você precisa para…
  • Guia de solução de problemas gerais GNU/Linux para iniciantes
  • MX Linux vs Ubuntu