Если вы когда-нибудь пробовали настроить SSL на сервере, то я думаю, вы знаете, что это занятие не из приятных и требует много внимания, сил и что самое главное времени. На днях мне пришлось столкнуться с этой задачкой на клиентском VPS, и я решил ее очень простым способом, о котором вы сможете прочитать далее в моем посте…
Перед началом работы
Для начала скажу, что для решения задачи я использовал Let’s Encrypt. Если описывать несколькими словами, то Let’s Encrypt упрощает процесс установки SSL-сертификатов и позволяет создать бесплатный SSL сертификат прямо на вашем сайте за несколько минут.
Если вдаваться в подробности, то Let’s Encrypt по своей сути — это некоммерческий проект, предоставляющая бесплатный, открытый и автоматизированный CA (certificate authority — центр сертификации), созданный ISRG на благо всего общества:
- Бесплатно: владелец любого домена может воспользоваться Let’s Encrypt и получить доверенный TLS-сертификат (TLS — наследник SSL) совершенно бесплатно;
- Автоматизированно: Let’s Encrypt предоставляет бесплатное и свободное программное обеспечение, которое, будучи настроенным на сервере, может полностью автоматически запрашивать предоставляемые сертификаты Let’s Encrypt, и автоматически конфигурировать/обновлять их;
- Безопасно: Let’s Encrypt строится как платформа для продвижения лучших практик безопасности TLS как на стороне центра сертификации (CA), так и на стороне сайтов, помогая администраторам правильно настраивать серверы;
- Прозрачно: информация о выпуске и отзыве каждого сертификата Let’s Encrypt доступна публично так, что любой желающий сможет изучить её;
- Свободно: протоколы взаимодействия со CA, позволяющие автоматизировать процессы выпуска и обновления сертификатов, будут опубликованы как открытый стандарт для максимального внедрения;
- Кооперативно: как и любой протокол, лежащий в основе Интернета и WWW в целом, Let’s Encrypt является совместным, неподконтрольным какой-либо конкретной организации некоммерческим проектом созданным исключительно для того, чтобы принести пользу обществу.
Список выше я взял с официального сайта Let’s Encrypt, остальную краткую информацию я думаю вы сможете успешно «нагуглить».
Установка Let’s Encrypt
Библиотека Let’s Encrypt устанавливается через Git, а это значит, что для начала Git нужно установить на сервере в первую очередь. Поэтому в консоли пишем следующее:
sudo apt-get update sudo apt-get install git
После этого клонируем и устанавливаем Let`s Encrypt:
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
Обратите внимание, что я копирую в директорию /opt/letsencrypt вы же можете копировать куда вам угодно, однако я советую копировать по такому же пути, ибо этот же путь обычно используется сторонними программными продуктами Ubuntu.
Установка SSL-сертификата
Для установки переходим в директорию, где лежит Let’s Encrypt и запускаем установщик:
./letsencrypt-auto --apache -d mydomain.com
Для нескольких доменов или поддоменов выполните следующее:
./letsencrypt-auto --apache -d mydomain.com -d www.mydomain.com
На этом все. Let’s Encrypt прогонит вас по установке, сгенерирует SSL файлы и настоит веб-сервер Apache.
Автопродление сертификатов
Let’s Encrypt SSL сертификаты действительны только в течении 90 дней (примерно 3 месяца) и по завершению этого срока, они истекают и должны быть продлены. К счастью есть волшебная команда, которая решает эту проблему. Команда будет проверять все сертификаты, которые установлены в системе и возобновлять те, которые истекают менее чем за 30 дней. Команда приведена ниже:
/letsencrypt-auto renew
Также можно настроить обновление в определенные промежутки времени. Например, чтобы выполнять обновление каждый понедельник в 2 часа ночи придется написать следующее:
sudo crontab –e
И далее добавьте следующую команду:
0 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
Как работает Let’s Encrypt под капотом
На самом деле Let’s Encrypt выполняет достаточно много команд, так, что вы это даже не замечаете и не подозреваете как он работает. Если все, что делает Let’s Encrypt, делать вручную, то этот процесс будет примерно выглядеть как описано ниже.
Активируем модуль Apache SSL и перезапускаем сервер:
sudo a2enmod ssl sudo service apache2 restart
Создаем директорию, где вы будете хранить файлы SSL-сертификатов:
sudo mkdir /etc/apache2/ssl
Генерируем ключ и сертификат с OpenSSL:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/mydomain.key -out /etc/apache2/ssl/mydomain.crt
После создания всех файлов необходимо настроить Apache, на использование SSL-сертификатов. Для этого нужно создать конфигурационный файл:
sudo nano /etc/apache2/sites-available/mydomain-ssl.conf
и вставить следующий код:
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin admin@mydomain.com ServerName mydomain.com ServerAlias www.mydomain.com # Путь до того места где лежит сайт DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on # Путь где лежит .key и .crt файл SSLCertificateFile /etc/apache2/ssl/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/apache.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule>
Активируем конфигурацию и перезапускаем Apache:
sudo a2ensite mydomain-ssl.conf sudo service apache2 restart
На этом все, надеюсь мой пост кому-нибудь когда-то поможет.