НАСТРОЙКА LET'S ENCRYPT SSL СЕРТИФИКАТОВ В APACHE
Начну издалека. Вот буквально недавно мой замечательный сайтик, моя прелесть, перешел на безопасный https протокол. Это значит, что трафик между клиентом (вами) и сервером теперь зашифрован и никто не сможет похитить ваши (а, главное, мои) пароли и прочую важную фигню. С основным зеркалом сайта оказалось все довольно просто. Моя хостинговая компания - https://hts.ru. Они предоставляют SSL сертификат от Let's Encrypt и сами активируют его по тикиту в техподдержку. Далее была проблема с Joomla CMS. При включении SSL в админке на весь сайт, сайт прекращал работу, возникал какой-то циклический редирект... Откуда и почему - я хз. Попробовал чистую установку Joomla, без лишних модулей и с чистой базой - один хрен, все осталось как и было. В итоге обратился за помощью к фрилансеру... И он довольно быстро разобрался, содрав с меня 1 килорубль. В итоге, картина теперь ясна.
Во-первых, качаем этот "htaccess_txt", кидаем его в корень вашего сайта и переименовываем в ".htaccess".
Там важна такая запись:
## Mod_rewrite in use. RewriteEngine On RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Далее в файле configuration.php значение "public $live_site" оставляем пустым. Хотя, если вы напишите там https://your_domain.ru, то ничего страшного.
public $live_site = '';
public $force_ssl = '2';
Параметр public $force_ssl отключает https протокол, что может быть полезно, чтобы вернуть сайт обратно на http. Значение по умолчанию равно нулю.
Ну и самое главное, что я не смог найти самостоятельно... Не знаю, может и додумался бы, но во всех попавшихся мне инструкциях этот файл находился по другому адресу, и я почему-то пришел к выводу, что в новой версии Joomla его просто нет. Однако он есть и если вы не обнаружите его по адресу /your_domain.ru/libraries/src/Uri/Uri.php, то надо просто воспользоваться поиском. В данном файле надо найти параметр $https = '://'; строка 77 и заменить его на $https = 's://'; Вот, именно эта буква стоила мне трех дней обжорства салатикамт в Spar-е, потому что асе остальные настройки у меня были прописаны как следует...
Все это здорово и прекрасно на основном сайте. Однако же зеркальный сайт на своем собственном сервере пришлось настраивать самостоятельно. Имеется в виду home.madmentat.ru
Перед установкой SSL на Ubuntu/Debian необходимо включить модуль mod_ssl с помощью команды:
sudo a2enmod ssl
Чтобы не компостировать себе мозги, установим клиент Certbot. Certbot - это что-то вроде пакета скриптов, которые все делают за вас. Этот пакет очень активно разрабатывается и у него есть свой собственный репозиторий, где можно найти актуальную версию.
sudo add-apt-repository ppa:certbot/certbot
Чтобы продолжить, нажмите Enter. Обновите индекс пакетов:
sudo apt update
Теперь установите пакет certbot для Apache:
sudo apt install python-certbot-apache
Certbot умеет проверять хост в конфигурации Apache, чтобы автоматически настроить сертификат SSL. Для этого он ищет директиву ServerName, где указан домен, для которого предназначен запрашиваемый сертификат.
Если у вас настроен виртуальный хост, вроде /etc/apache2/sites-available/example.com.conf, проверьте параметр ServerName.
sudo nano /etc/apache2/sites-available/example.com.conf
Если что, вписываем туда имя своего домена:
... ServerName example.com; ...
sudo systemctl reload apache2
Если у вас на сервере включен брандмауэр ufw, вам нужно настроить его для поддержки соединений HTTPS.
Во время установки Apache регистрирует в ufw несколько профилей. Просмотреть текущие настройки можно с помощью команды:
sudo ufw status
Скорее всего, брандмауэр пока что поддерживает только трафик HTTP:
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)
Чтобы разблокировать трафик HTTPS, активируйте профиль Apache Full и удалите профиль Apache.
sudo ufw allow 'Apache Full'
sudo ufw delete allow 'Apache'
Теперь пора запустить Certbot и получить сертификаты.
sudo certbot --apache -d example.com -d www.example.com
Если проверка пройдет успешно, certbot спросит, как вы хотите настроить HTTPS:
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):
Сделайте свой выбор, затем нажмите Enter. Конфигурация будет обновлена, и Apache перезагрузится, чтобы использовать новые настройки. Клиент certbot выведет сообщение о том, что процесс был выполнен успешно и скажет, где хранятся ваши сертификаты:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2018-07-23. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Сертификаты будут загружены и установлены. Попробуйте перезагрузить свой сайт, указав https://, и обратите внимание на индикатор безопасности в браузере. Он должен указывать, что сайт надежно защищен (как правило, для этого используется зеленый замочек в адресной строке). Если вы протестируете свой сервер с помощью SSL Labs Server Test, он получит оценку A. Конечно, я всю эту писанину откуда-то с-дил, но вот, добавлю от себя, что у меня была проблема: при переходе по ссылке home.madmentat.ru сайт запускался черех http протокол, хотя, если прописать четко https://home.madmentat.ru, тогда все работало как надо. Чтобы избавиться от этой проблемы, я просто тупо прописал редирект в /etc/apache2/sites-available/madmentat.local.conf, приведя его к такому виду:
ServerAdmin Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.
ServerName home.madmentat.ru
ServerAlias home.madmentat.ru
Redirect permanent / https://home.madmentat.ru/
DocumentRoot /data/webserver/madmentat.local/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Ключевое тут
Redirect permanent / https://home.madmentat.ru/
Ну и наконец:
sudo systemctl restart apache2