O Certbot não implementa o redirecionamento para o https para o site do Apache2

1

A questão
Eu quero entender como implementar o redirecionamento de http para https, usando o Apache2 com certificação da Certbot.

Os detalhes
Em um novo servidor rodando o Ubuntu 16.04, eu instalei uma configuração do "Servidor Perfeito" (ISPConfig, Postfix, Dovecot e família) para executar um pequeno servidor de e-mail.

Eu também usei o Certbot para instalar certificados SSL. Antes de usar o Certbot, adicionei manualmente ServerName my.domain.com a quatro arquivos que encontrei no diretório /etc/apache2/sites-available/ ...

  • 00-default.conf
  • apps.vhost
  • default-ssl.conf
  • ispconfig.vhost

... e também para este arquivo:

  • /etc/apache2/apache2.conf

Meu entendimento é que isso fornece à Certbot informações sobre quais nomes de domínio existem no servidor e garante que os desafios serão atendidos. (Talvez isso tenha sido um exagero? Talvez tenha sido o suficiente para editar apenas o 'apache2.conf')

Eu então corri:

certbot --apache -d my.domain.com

Durante a instalação, selecionei a opção Redirecionar:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Esta é a promessa que o Certbot fez:

Redirecting vhost in /etc/apache2/sites-enabled/000-apps.vhost to
ssl vhost in /etc/apache2/sites-enabled/000-ispconfig.vhost

No entanto, existem dois problemas:

  1. Nenhum redirecionamento foi proposto para o site padrão na porta: 80
  2. Os arquivos que o Certbot estava falando nunca existiram, como você pode ver aqui:
# ls -al /etc/apache2/sites-available/
total 36
drwxr-xr-x 2 root root 4096 Nov  9 17:29 .
drwxr-xr-x 9 root root 4096 Nov  9 16:44 ..
-rw-r--r-- 1 root root 1336 Nov  9 14:35 000-default.conf
-rw-r--r-- 1 root root 1340 Nov  9 16:44 apps.vhost
-rw-r--r-- 1 root root 1200 Nov  9 16:33 apps.vhost.save
-rw-r--r-- 1 root root 6387 Nov  9 15:08 default-ssl.conf
-rw-r--r-- 1 root root 1929 Nov  9 12:36 ispconfig.conf
-rw-r--r-- 1 root root 3349 Nov  9 16:44 ispconfig.vhost

Agora, quando me conecto ao link , vejo a página padrão do Apache2 Ubuntu, sem redirecionamento. Se eu me conectar ao link , todos os navegadores informam que há um problema. O Firefox é mais explícito:

Secure Connection Failed

An error occurred during a connection to my.domain.com.
SSL received a record that exceeded the maximum permissible length.
Error code: SSL_ERROR_RX_RECORD_TOO_LONG

The page you are trying to view cannot be shown because the
authenticity of the received data could not be verified.

No entanto, quando visito a página do ISPConfig no link , tudo funciona bem. Os navegadores ficam felizes em me mostrar o sinal verde "seguro" à direita da barra de endereço.

Visitar o link é educado, mas não tão bem-sucedido:

Bad Request

Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.

Eu observei que o Certbot fez alterações no arquivo em /etc/apache/sites-available/ispconfig.vhost . No extrato abaixo, as linhas marcadas com --- foram removidas e as linhas +++ foram adicionadas.

# SSL Configuration
  SSLEngine On
  SSLProtocol All -SSLv3
  --- SSLCertificateFile /usr/local/ispconfig/interface/ssl/ispserver.crt
  --- SSLCertificateKeyFile /usr/local/ispconfig/interface/ssl/ispserver.key
  #SSLCACertificateFile /usr/local/ispconfig/interface/ssl/ispserver.bundle

  SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-S$
  SSLHonorCipherOrder On

  <IfModule mod_headers.c>
  Header always add Strict-Transport-Security "max-age=15768000"
  RequestHeader unset Proxy early
  </IfModule>

  SSLUseStapling On
  SSLStaplingResponderTimeout 5
  SSLStaplingReturnResponderErrors Off
  +++ SSLCertificateFile /etc/letsencrypt/live/my.domain.com/fullchain.pem
  +++ SSLCertificateKeyFile /etc/letsencrypt/live/my.domain.com/privkey.pem
  +++ Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>

(Certbot também adicionou um diretório em /etc/letsencrypt/ contendo toda a qualidade da certificação.)

Meu objetivo
Estou procurando entender quais alterações preciso fazer nos arquivos em /etc/apache2/sites-available para que o link seja redirecionado silenciosamente para link , tanto para o site principal quanto para as páginas do ISPConfig na porta: 8080.

Em outras palavras, quero saber como fazer com arquivos reais o que o Certbot disse que faria com arquivos que existiam apenas em sua imaginação.

    
por James Newton 09.11.2017 / 16:57

1 resposta

1

O principal problema aqui é entradas duplicadas do servidor na configuração. Por causa disso, é provável que apenas algumas das opções de configuração do seu servidor estejam sendo carregadas pelo Apache.

certbot --apache (executado sem a opção certonly ) lê a configuração do servidor da web e tenta atualizar automaticamente a configuração do site para o qual obteve um certificado. Se houver várias entradas para o site na configuração do servidor da web, ele poderá atualizar uma configuração que não está sendo lida. Acho que é isso que está acontecendo aqui.

Existem várias abordagens diferentes para organizar os arquivos de configuração do servidor web, e é fácil misturá-los. Qual deles você pretende usar? Esta questão de falha no servidor pode ajudar.

EDIT: leia novamente sobre redirecionamentos do certbot em questão - remover as linhas adicionadas pelo certbot e executar certbot apache -d example.com novamente após a configuração ser organizada deve permitir que o certbot adicione automaticamente as opções de redirecionamento.

    
por 09.11.2017 / 17:49