Как защитить Nginx с помощью Let’s Encrypt в Ubuntu 14.04
Введение
Let’s Encrypt — это новый центр сертификации (ЦС), который предоставляет простой способ получения и установки бесплатных сертификатов TLS/SSL, тем самым обеспечивая шифрование HTTPS на веб-серверах. Он упрощает процесс, предоставляя программный клиент Certbot, который пытается автоматизировать большинство (если не все) необходимых шагов. В настоящее время весь процесс получения и установки сертификата полностью автоматизирован как на веб-серверах Apache, так и на Nginx.
В этом руководстве мы покажем вам, как использовать Certbot для получения бесплатного сертификата SSL и использовать его с Nginx в Ubuntu 14.04 LTS. Мы также покажем вам, как автоматически обновить ваш SSL-сертификат.
В этом руководстве мы будем использовать файл конфигурации Nginx по умолчанию вместо отдельного файла блока сервера. этот сервер Nginx блокируется с помощью учебника Let’s Encrypt.
Предпосылки
Прежде чем следовать этому руководству, вам понадобится несколько вещей.
- Сервер Ubuntu 14.04 с пользователем без полномочий root с правами
sudo
. Вы можете узнать, как настроить такую учетную запись пользователя, следуя нашему руководству по начальной настройке сервера для Ubuntu 14.04. - Nginx установлен, как установить Nginx в Ubuntu 14.04 LTS
- Вы должны владеть или контролировать зарегистрированное доменное имя, с которым хотите использовать сертификат. Если у вас еще нет зарегистрированного доменного имени, вы можете зарегистрировать его у одного из многочисленных регистраторов доменных имен (например, Namecheap, GoDaddy и т. д.).
- Запись A DNS, указывающая ваш домен на общедоступный IP-адрес вашего сервера. Вы можете следовать этому руководству по имени хоста, чтобы узнать, как их добавить. Это необходимо из-за того, как Let’s Encrypt проверяет, что вы являетесь владельцем домена, для которого он выдает сертификат. Например, если вы хотите получить сертификат для
example.com
, этот домен должен разрешаться на ваш сервер, чтобы процесс проверки работал. Наша установка будет использоватьexample.com
иwww.example.com
в качестве имен доменов, поэтому необходимы обе записи DNS.
Когда у вас есть все необходимые условия, давайте перейдем к установке Certbot, клиентского программного обеспечения Let’s Encrypt.
Шаг 1 — Установка Certbot
Первым шагом к использованию Let’s Encrypt для получения SSL-сертификата является установка программного обеспечения certbot
на ваш сервер. Разработчики Certbot поддерживают собственный репозиторий программного обеспечения Ubuntu с последними версиями программного обеспечения. Поскольку Certbot находится в такой активной разработке, стоит использовать этот репозиторий для установки более новой версии Certbot, чем предоставленная Ubuntu.
Сначала добавьте репозиторий:
- sudo add-apt-repository ppa:certbot/certbot
Вам нужно будет нажать ENTER
, чтобы принять. После этого обновите список пакетов, чтобы получить информацию о пакете нового репозитория:
- sudo apt-get update
И, наконец, установите Certbot с помощью apt-get
:
- sudo apt-get install python-certbot-nginx
Клиент certbot
Let’s Encrypt теперь готов к использованию.
Шаг 2 — Настройка Nginx
Certbot может автоматически настраивать SSL для Nginx, но он должен иметь возможность найти правильный блок server
в вашей конфигурации. Для этого он ищет директиву server_name
, которая соответствует домену, для которого вы запрашиваете сертификат. Если вы начинаете с новой установки Nginx, вы можете обновить файл конфигурации по умолчанию:
- sudo nano /etc/nginx/sites-available/default
Найдите существующую строку server_name
:
server_name localhost;
Замените localhost
своим доменным именем:
server_name example.com www.example.com;
Сохраните файл и выйдите из редактора. Проверьте синтаксис изменений конфигурации с помощью:
- sudo nginx -t
Если это работает без ошибок, перезагрузите Nginx, чтобы загрузить новую конфигурацию:
- sudo service nginx reload
Теперь Certbot сможет найти правильный блок server
и обновить его. Теперь мы обновим наш брандмауэр, чтобы разрешить HTTPS-трафик.
Шаг 3 — Получение SSL-сертификата
Certbot предоставляет различные способы получения SSL-сертификатов с помощью различных подключаемых модулей. Плагин Nginx позаботится о перенастройке Nginx и перезагрузке конфигурации при необходимости:
- sudo certbot --nginx -d example.com -d www.example.com
Это запускает certbot
с плагином --nginx
, используя -d
, чтобы указать имена, для которых мы хотим, чтобы сертификат был действительным.
Если вы впервые запускаете certbot
, вам будет предложено ввести адрес электронной почты и принять условия обслуживания. После этого certbot
свяжется с сервером Let’s Encrypt, а затем запустит вызов, чтобы убедиться, что вы контролируете домен, для которого запрашиваете сертификат.
В случае успеха certbot
спросит, как вы хотите настроить параметры HTTPS:
OutputPlease 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
. Конфигурация будет обновлена, и Nginx перезагрузится, чтобы принять новые настройки. certbot
завершится сообщением о том, что процесс прошел успешно и где хранятся ваши сертификаты:
OutputIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
expire on 2017-10-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.
Шаг 4 — Проверка автоматического продления Certbot
Сертификаты Let’s Encrypt действительны только в течение девяноста дней. Это сделано для того, чтобы пользователи автоматизировали процесс обновления своих сертификатов. Установленный нами пакет certbot
позаботится об этом за нас, запуская «certbot renew» два раза в день через системный таймер. В дистрибутивах, отличных от systemd, эта функциональность обеспечивается скриптом, размещенным в /etc/cron.d
. Эта задача запускается два раза в день и обновляет любой сертификат, срок действия которого истекает в течение тридцати дней.
Чтобы протестировать процесс обновления, вы можете выполнить пробный запуск с помощью certbot
:
- sudo certbot renew --dry-run
Если вы не видите ошибок, все готово. При необходимости Certbot обновит ваши сертификаты и перезагрузит Nginx, чтобы применить изменения. Если автоматический процесс продления когда-либо завершится с ошибкой, Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты с предупреждением о том, что срок действия вашего сертификата скоро истечет.
Заключение
В этом руководстве мы установили клиент Let’s Encrypt certbot
, загрузили SSL-сертификаты для нашего домена, настроили Nginx для использования этих сертификатов и настроили автоматическое обновление сертификатов. Если у вас есть дополнительные вопросы об использовании Certbot, их документация — хорошее место для начала.