Вопрос
Я хочу понять, как реализовать перенаправление с http на https, используя Apache2 с сертификацией Certbot.
Детали
На новом сервере под управлением Ubuntu 16.04 я установил Настройка «Perfect Server» (ISPConfig, Postfix, Dovecot и семейство), чтобы запустить небольшой почтовый сервер.
Я также использовал Certbot для установки сертификатов SSL. Перед использованием Certbot я вручную добавил ServerName my.domain.com
в четыре файла, которые я нашел в /etc/apache2/sites-available/
каталог ...
... а также в этот файл:
Я понимаю, что это дает Certbot информацию о том, какие доменные имена существуют на сервере, и гарантирует, что проблемы будут решены. (Возможно, это было перебором? Возможно, достаточно было отредактировать только `apache2.conf?)
Затем я побежал:
certbot --apache -d my.domain.com
Во время установки я выбрал опцию Redirect:
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
Вот обещание, которое дал Certbot:
Redirecting vhost in /etc/apache2/sites-enabled/000-apps.vhost to
ssl vhost in /etc/apache2/sites-enabled/000-ispconfig.vhost
Однако есть две проблемы:
# 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
Теперь, когда я подключаюсь к http://my.domain.com, Я вижу страницу по умолчанию Apache2 Ubuntu без перенаправления. Если я подключусь к https://my.domain.com, то все браузеры сообщают мне о проблеме. Firefox наиболее откровенен:
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.
Однако когда я захожу на страницу ISPConfig по адресу https: // http: //my.domain.com: 8080 /, все работает плавно. Браузеры с удовольствием показывают мне зеленый знак «безопасность» справа от адресной строки.
Посещение http: // http: //my.domain.com: 8080 / вежливо, но не очень удачно:
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.
Замечу, что Certbot внес изменения в файл по адресу /etc/apache/sites-available/ispconfig.vhost
. В приведенном ниже фрагменте строки, отмеченные ---
были удалены, а строки +++
были добавлены.
# 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 также добавил каталог на /etc/letsencrypt/
содержащие все качества сертификации.)
Моя цель
Я пытаюсь понять, какие изменения мне нужно внести в файлы в /etc/apache2/sites-available
так что http://my.domain.com молча перенаправляется на https://my.domain.com, как для основного сайта, так и для страниц ISPConfig на порту: 8080.
Другими словами, я хочу знать, как делать с реальными файлами то, что Certbot обещал сделать с файлами, которые существовали только в его воображении.
Основная проблема здесь - дублирование записей сервера в конфигурации. Из-за этого вполне вероятно, что Apache загружает только некоторые параметры конфигурации вашего сервера.
certbot --apache
(беги без certonly
option) считывает конфигурацию веб-сервера и пытается автоматически обновить конфигурацию сайта, для которого он получил сертификат. Если в конфигурации веб-сервера есть несколько записей для сайта, он может обновить конфигурацию, которая не читается - я думаю, что здесь происходит.
Существует несколько различных подходов к организации файлов конфигурации веб-сервера, и их легко перепутать. Какой из них вы собираетесь использовать? Этот вопрос о сбое сервера может помочь.
РЕДАКТИРОВАТЬ: перечитайте о перенаправлениях certbot, о которых идет речь - удаление строк, добавленных certbot, и запуск certbot apache -d example.com
снова после того, как конфигурация организована, должен позволить certbot автоматически добавлять параметры перенаправления.