НАСТРОЙКА LET'S ENCRYPT SSL СЕРТИФИКАТОВ В APACHE

https

Начну издалека. Вот буквально недавно мой замечательный сайтик, моя прелесть, перешел на безопасный 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