Поднимаем SSL за 5 минут

Если вы когда-нибудь пробовали настроить SSL на сервере, то я думаю, вы знаете, что это занятие не из приятных и требует много внимания, сил и что самое главное времени. На днях мне пришлось столкнуться с этой задачкой на клиентском VPS, и я решил ее очень простым способом, о котором вы сможете прочитать далее в моем посте…

Перед началом работы

Для начала скажу, что для решения задачи я использовал Let’s Encrypt. Если описывать несколькими словами, то Let’s Encrypt упрощает процесс установки SSL-сертификатов и позволяет создать бесплатный SSL сертификат прямо на вашем сайте за несколько минут.

Если вдаваться в подробности,  то Let’s Encrypt по своей сути — это некоммерческий проект, предоставляющая бесплатный, открытый и автоматизированный  CA (certificate authority — центр сертификации), созданный ISRG на благо всего общества:

  1. Бесплатно: владелец любого домена может воспользоваться Let’s Encrypt и получить доверенный TLS-сертификат (TLS — наследник SSL) совершенно бесплатно;
  2. Автоматизированно: Let’s Encrypt предоставляет бесплатное и свободное программное обеспечение, которое, будучи настроенным на сервере, может полностью автоматически запрашивать предоставляемые сертификаты Let’s Encrypt,  и автоматически конфигурировать/обновлять их;
  3. Безопасно: Let’s Encrypt строится как платформа для продвижения лучших практик безопасности TLS как на стороне центра сертификации (CA), так и на стороне сайтов, помогая администраторам правильно настраивать серверы;
  4. Прозрачно: информация о выпуске и отзыве каждого сертификата Let’s Encrypt доступна публично так, что любой желающий  сможет изучить её;
  5. Свободно: протоколы взаимодействия со CA, позволяющие автоматизировать процессы выпуска и обновления сертификатов, будут опубликованы как открытый стандарт для максимального внедрения;
  6. Кооперативно: как и любой протокол, лежащий в основе Интернета и 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

На этом все, надеюсь мой пост кому-нибудь когда-то поможет.

Подписаться на новые статьи