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:
- Nenhum redirecionamento foi proposto para o site padrão na porta: 80
- 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.