Создание сертификата Let’s Encrypt для Nginx в FreeBSD

Let’s Encrypt – это центр сертификации (ЦС или CA), который предоставляет бесплатные TLS/SSL-сертификаты для поддержки шифрования HTTPS. Благодаря клиенту Certbot, который автоматизирует большую часть этапов, вы можете быстро получить свой сертификат.

Данный мануал поможет получить SSL-сертификат через Certbot и использовать его на сервере FreeBSD для защиты трафика Nginx. Также вы научитесь настраивать автоматическое обновление сертификатов.

Для настройки мы будем использовать стандартный конфигурационный файл Nginx. Однако мы рекомендуем вам создать отдельный виртуальный хост (блок server в Nginx) для каждого домена: это позволяет избежать общих ошибок и сохраняет конфигурации по умолчанию в качестве резервной настройки на случай сбоев.

Требования

  • Сервер FreeBSD, настроенный по мануалу Начало работы с FreeBSD 10.1.
  • Веб-сервер Nginx (читайте Установка стека FEMP на сервер FreeBSD 10.1). Обратите внимание: для получения сертификата Let’s Encrypt вам не нужно устанавливать и настраивать PHP или MySQL.
  • Зарегистрированное доменное имя, которым вы управляете. Если у вас еще нет зарегистрированного домена, вы можете получить его у одного из многочисленных регистраторов доменных имен (Namecheap, GoDaddy и т. д.).
  • DNS-запись А, направленная на домен или внешний IP-адрес сервера (читайте Как настроить имя хоста). С ее помощью Let’s Encrypt сможет подтвердить ваше право на домен. Для примера мы будем использовать example.com и www.example.com, поэтому нам необходимы две записи DNS.

1: Установка Certbot

Первый шаг к получению сертификата SSL – установить программное обеспечение certbot на сервер. Последнюю версию Certbot можно установить из портов FreeBSD.

Загрузите сжатый снапшот дерева портов:

sudo portsnap fetch

На выполнение этой команды может уйти несколько минут. После этого извлеките данные из снапшота:

sudo portsnap extract

На выполнение этой команды может потребоваться некоторое время. Как только она будет выполнена, перейдите в каталог py-certbot в дереве портов:

cd /usr/ports/security/py-certbot

С помощью make с привилегиями sudo загрузите исходный код Certbot и скомпилируйте его:

sudo make install clean

Перейдите в каталог py-certbot-nginx в дереве портов:

cd /usr/ports/security/py-certbot-nginx

Выполните команду make еще раз в этом каталоге. Это установит плагин nginx для Certbot, который мы будем использовать для получения SSL-сертификатов:

sudo make install clean

Во время установки плагина вы увидите пару синих диалоговых окон, которые выглядят так:

py27-certbot-nginx-0.25.1
+[x] DOCS  Build and/or install documentation?
<Ok>       <Cancel>

Это дает вам возможность установить документацию для плагина и его зависимостей. Для целей данного руководства вы можете просто нажать ENTER, чтобы принять параметры по умолчанию и установить документацию.

Теперь certbot готов к использованию. Однако прежде чем получить сертификаты, важно настроить брандмауэр и открыть HTTPS-трафик.

2: Настройка брандмауэра и поддержка HTTPS-трафика

Если вы уже настроили брандмауэр на своем сервере, вы должны убедиться, что он поддерживает доступ HTTPS (через порт 443). Если вы еще не настроили брандмауэр, вы можете сделать это сейчас.

Откройте файл rc.conf, который находится в каталоге /etc/:

sudo ee /etc/rc.conf

Этот файл сообщает FreeBSD, какие серверы следует автоматически запускать вместе с сервером. В верхней части файла добавьте следующие выделенные строки:

. . .
nginx_enable="YES"
firewall_enable="YES"

firewall_type="workstation"


firewall_myservices="22 80 443"


firewall_allowservices="any"

Эти директивы делают следующее:

  • firewall_enable=”YES” загружает брандмауэр во времы загрузки сервера.
  • firewall_type=”workstation”: FreeBSD предоставляет несколько типов брандмауэров по умолчанию, каждый из которых имеет несколько разные конфигурации. Брандмауэр workstation будет защищать этот сервер только с помощью stateful правил.
  • firewall_myservices=”22 80 443″: в этой директиве можно перечислить все необходимые TCP-порты. В данном случае брандмауэр открывает порты 22, 80 и 443 (SSH, HTTP и HTTPS соответственно).
  • firewall_allowservices=”any”: позволяет любому IP-адресу взаимодействовать с сервером через порты, указанные в директиве firewall_myservices.

После добавления этих строк сохраните файл и закройте редактор (нажмите CTRL+C, наберите exit, а затем нажмите Enter).

Затем запустите сервис брандмауэра ipfw с помощью следующей команды:

sudo service ipfw start

Настроив брандмауэр, вы можете запустить Certbot и получить сертификаты.

3: Получение SSL-сертификата

Certbot предлагает различные способы получения сертификатов SSL через разные плагины. Плагин nginx позаботится о переконфигурировании веб-сервера Nginx и перезагрузке конфигурационного файла.

sudo certbot --nginx -d example.com -d www.example.com

Если это первый запуск certbot на этом сервере, клиент предложит вам ввести адрес электронной почты и принять условия шифрования Let’s Encrypt. После этого certbot свяжется с сервером Let’s Encrypt, а затем запустит проверку, чтобы убедиться, что домен, для которого вы запрашиваете сертификат, действительно принадлежит вам.

Если проверка пройдет успешно, 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): 2

Сделайте свой выбор, затем нажмите Enter. Это обновит конфигурацию и перезагрузит Nginx, чтобы включить новые настройки. В конце certbot выдаст сообщением о том, что процесс прошел успешно, и скажет, где хранятся ваши сертификаты:

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/usr/local/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/usr/local/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2018-09-24. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /usr/local/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.

Убедившись, что сайт работает через HTTPS, вы можете перейти к заключительному этапу – настройке автоматического обновления сертификатов.

4: Автоматическое обновление сертификатов Certbot

Сертификаты Let’s Encrypt действительны только в течение девяноста дней. Это должно побудить пользователей автоматизировать процесс продления сертификата. В этом разделе вы узнаете, как автоматизировать обновление сертификата с помощью задач cron. Прежде чем настроить автоматическое обновление, важно убедиться, что вы можете правильно обновлять сертификаты.

Чтобы протестировать процесс обновления, вы можете запустить сухой прогон certbot:

sudo certbot renew --dry-run

Если команда не вернула ошибок, вы можете запланировать ее запуск в crontab.

sudo crontab -e

Это откроет новый файл crontab. Добавьте в файл новую строку, которая будет запускать команду certbot renew дважды каждый день – в полдень и полночь. Команда certbot renew проверяет, скоро ли истекает срок действия сертификатов в системе, и пытается их обновить, если это необходимо.

0 0,12 * * * /usr/local/bin/certbot renew

Обратите внимание: поскольку команда crontab -e начинается с sudo, эта операция будет выполняться как root, так как для запуска certbot требуются привилегии суперпользователя.

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

Заключение

В этом мануале вы научились устанавливать клиент Let’s Encrypt certbot, загружать сертификаты SSL для вашего домена, настраивать Nginx для использования этих сертификатов и автоматически обновлять сертификаты. Если у вас есть дополнительные вопросы по использованию Certbot, поищите ответы в документации.

Tags: , , , ,

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