Создание SSL-сертификата Let’s Encrypt в Nginx на Ubuntu 16.04

Let’s Encrypt – это новый центр сертификации (ЦС, или Certificate Authority, CA), который предоставляет простой способ создания сертификатов TLS/SSL, тем самым позволяя шифровать HTTPS на веб-серверах. Этот ЦС упрощает процесс создания сертификатов путём автоматизации большинства необходимых действий при помощи клиентского ПО. На данный момент Let’s Encrypt ещё находится в открытом бета-тестировании; пока что процесс получения и установки сертификата полностью автоматизирован только на веб-серверах Apache. Тем не менее, Let’s Encrypt позволяет получить бесплатный сертификат SSL, который можно установить вручную независимо от программного обеспечения веб-сервера.

Пошаговая инструкция по настройке Let’s Encrypt и получению SSL-сертификата для Nginx в системе Ubuntu 16.04 и обновлению этого сертификата.

Условия:

  • Настроенный сервер на Ubuntu 16.04
  • Созданный пользователь (не root) с привилегиями суперпользователя. Как настроить такого пользователя (Шаги №2-3) ?
  • Доступ к серверу по ssh
  • Настроенная A-запись домена на публичный IP-адрес сервера (или VPS).
  • Установленный веб сервер Nginx

 

Инструкция по настройке Let’s Encrypt в Nginx на Ubuntu 16.04

 

Шаг № 1 Установка клиента Let’s Encrypt

Для начала использования Let’s Encrypt и получения бесплатного SSL сертификата установим клиент letsencrypt на сервер. Let’s Encrypt проект, который переименован с клиента certboot и входит в состав репозитория Ubuntu 16.04

Обновляем локальные индексы  пакетов apt и устанавливаем клиент letsencrypt

Клиент letsencrypt готов к работе.

Шаг № 2 Получаем SSL сертификат

Let’s Encrypt предлагает несколько способов получения сертификата при помощи разных плагинов. На данный момент плагины позволяют только получить сертификат, а настройку сервера для использования этого сертификата нужно выполнить вручную; исключением является плагин для Apache.

Плагины, которые помогают получить сертификат, но не устанавливают его, называются аутентификаторами.

В данном руководстве для создания SSL-сертификата используется плагин Webroot.

Как использовать плагин Webroot

 

Плагин Webroot помещает специальный файл в каталог /.well-known в каталоге document root, который сервис Let’s Encrypt может открыть для подтверждения через веб-сервер. В зависимости от настройки может понадобиться явно разрешить доступ к каталогу /.well-known.

Открываем стандартный конфигурационный файл или файл настроек своего сайта на Nginx

Внутри server block добавляем новый location block:

Также нужно проверить настройку каталога document root, за который отвечает директива root. По умолчанию каталогом document root является /var/www/html.

После добавления нового location block, проверяем настройки nginx командой:

Если в результате проверки видим результат:

Перезапускаем сервер Nginx для применения изменений, командой:

Когда мы знаем путь webroot, мы можем использовать плагин Webroot, что бы запросить SSL сертификат. мы будем использовать ключ -d для наших доменов. Если вы будете работать с несколькими доменами например (example.com и www.example.com), нужно включать сертификат для обоих.

Выполним команду:

Правильно укажите путь к своему сайту на сервере ( —webroot-path=/var/www/html ) и названия доменов. 

После инициализации клиента letsencrypt нужно будет ввести некоторую информацию.

Вводим свой электронный адрес, который будет использован в случае утери ключей для восстановления:

Let's Encrypt email ssl nginx

После этого читаем Соглашение и нажимаем «Agree».

Если все сделано правильно, мы увидим следующую информацию в которой нужно обратиь внимание на путь где сохранен сертификат «/etc/letsencrypt/live/example.com/» и скрок действия.

Запомните куда сохранен ваш сертификат.

Если вы увидели ошибку:

Это значит, что в настройках firewall на вашем сервере должны быть открыты порты 80 и 443.

Файлы сертификатов

После получения сертификатов, у вас появятся новые PEM файлы:

  • cert.pem: Ваш сертификат домена
  • chain.pem: сертификат цепочки Let’s Encrypt
  • fullchain.pem: cert.pem и chain.pem комбинированные
  • privkey.pem: Ваш приватный сертификат

Важно знать где хранятся сертификаты, который мы только что создали, так как мы будем их использовать в настройках веб сервера Nginx. Сами файлы помещаются в поддиректорию /etc/letsencrypt/archive. А Let’s Encrypt создает символьную ссылку для них в директорию с указанием вашего домена для которого они создавались. Пример: /etc/letsencrypt/live/your_domain_name Для каждого домена будет создана своя подпака, которую нужно будет указывать в файлах настройки Nginx для каждого из сайтов. 

Проверяем, создались ли файлы командой:

В выводе должны быть 4 файла, описанных ранее. Далее настроим свой веб-сервер на использование файла fullchain.pem в качестве файла сертификата и файла privkey.pem в качестве файла ключа сертификата.

 

Генерируем ключи Диффи-Хеллмана

Увеличиваем уровень защиты, для этого нужно сгенерировать ключи Диффи-Хеллмана. Чтобы сгенерировать 2048-битные ключи, выполним команду:

Процесс займет несколько минут и в итоге мы получим 2048-битный ключ в /etc/ssl/certs/dhparam.pem

 

Шаг № 3 Генерируем TLS/SSL на веб сервере Nginx

У нас уже есть SSL сертификаты, теперь нужно настроить веб сервер Nginx на их использование.

Выполним несколько действий в нашей конфигурации:

  • Мы создадим снипет конфигурации, содержащий наши ключи SSL и файлы сертификатов.
  • Мы создадим снипет конфигурации, содержащий сильные настройки SSL, которые можно будет использовать с любыми сертификатами в будущем.
  • Мы настроим серверные блоки Nginx для обработки SSL-запросов и используем два фрагмента выше.

Этот метод настройки Nginx позволит нам сохранить чистые серверные блоки и поместить общие сегменты конфигурации в модули многократного использования.

Создание снипета с указанием SSL ключа и сертификата

Создадим новый конфигурационный снипет в Nginx в директории /etc/nginx/snippets

Создадим новые снипеты в этой директории используя в первой части названия перед имене домена ssl- и закончим снипет .conf:

В этом файле нужно указать путь к сертификату ssl_certificate и путь к ключу сертификата ssl_certificate_key:

Добавляем пути, сохраняем и закрываем файл.

Создаем снипет с ключем Диффи-Хеллмана

Создадим снипет который будет использовать 2048-битный ключ. Так этот ключ мы можем использовать для разных сайтов создадим для него отдельный файл:

Воспользуемся настройками из Chiperli.st для наибольшей безопасности.

В итоге мы должны получить файл следующего ввида, где будет указана директория с нашим 2048-битным ключем:

Сохраняем и закрываем файл.

Настроим Nginx на использование SSL

Наши снипеты готовы, теперь настроим Nginx на использование SSL. В примере рассмотрим стандартный файл конфигурации для сайтов. Но у себя настройки вносить в существующие конфигурационные файлы для сайтов.

Перед тем как вносить изменения сделаем бекап нашего конфигурационного файла для стандартного сайта, котоыр в Nginx идет по умолчанию.

Внесем новые настройки в файл сайта (у себя подставлять файл своего сайта):

И приводим его к виду (тут показа фрагмент конфигурации):

Если вы используете firewall не забудь в настройках открыть 443 порт.

Шаг № 4 Применяем изменения в Nginx

Проверяем файл конфигурации на ошибки:

Если все настройки выполнены правильно то увидим вывод:

Перезапускаем веб сервер Nginx

Проверить свой сайт можно по ссылке в браузере:

 

 Шаг № 5 Настраиваем автоматическое продление сертификатов

Сертфикаты Let’s Encrypt выдаются на 90 дней. Но рекомендуется обновлять их каждые 60 дней, что бы избежать ошибок. Клиент letsencrypt поддерживает авто обновление сертификатов.

Для обновления сертификатов выполним команду:

В связи стем, что мы только что создали сертификаты, они не будут обновлены, а мы увидим информацию, что на данный момент сертификаты не нуждаются в обновлении:

Что бы автоматизировать это процесс, создадим задания в кроне:

и добавим в него

Мы создали задание которое будет запускать команду авто обновления каждый понедельник в 2:30 ночи и перечитывать конфигурацию  Nginx в 2:35 ночи (для использования обновленных сертификатов). Информация о действиях будет сохранят в лог файл /var/log/le-renewal.log.

Вывод

Теперь мы используем бесплатные SSL сертификаты от Let’s Encrypt. А наши сайты работают на безопасном протоколе https

 

 

 

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *