Вступление
Let’s Encrypt - это центр сертификации (CA), который предоставляет простой способ получить и установить бесплатныеTLS/SSL certificates, тем самым обеспечивая зашифрованный HTTPS на веб-серверах. Это упрощает процесс, предоставляя программный клиент Certbot, который пытается автоматизировать большинство (если не все) необходимых шагов. В настоящее время весь процесс получения и установки сертификата полностью автоматизирован как в Apache, так и в Nginx.
В этом руководстве вы будете использовать Certbot для получения бесплатного SSL-сертификата для Nginx в Ubuntu 16.04 и настройки автоматического обновления вашего сертификата.
В этом руководстве вместо файла по умолчанию будет использоваться отдельный файл блока сервера Nginx. We recommend создает новые файлы блоков сервера Nginx для каждого домена, потому что это помогает избежать некоторых распространенных ошибок и поддерживает файлы по умолчанию в качестве резервной конфигурации, как и предполагалось. Если вы хотите настроить SSL с использованием серверного блока по умолчанию, вы можете вместо этого использоватьthis Nginx + Let’s Encrypt tutorial.
Предпосылки
Чтобы следовать этому уроку, вам понадобится:
-
Один сервер Ubuntu 16.04, настроенный по этому руководствуinitial server setup for Ubuntu 16.04, включая пользователя sudo без полномочий root и брандмауэр.
-
Полностью зарегистрированное доменное имя. В этом руководстве будет использоваться
example.com
. Вы можете приобрести доменное имя наNamecheap, получить его бесплатно наFreenom или воспользоваться услугами регистратора доменов по вашему выбору. -
Обе следующие записи DNS настроены для вашего сервера. Вы можете следить заthis hostname tutorial, чтобы узнать, как их добавить.
-
Запись A с
example.com
, указывающая на общедоступный IP-адрес вашего сервера. -
Запись A с
www.example.com
, указывающая на общедоступный IP-адрес вашего сервера.
-
-
Nginx установлен следующим образом:How To Install Nginx on Ubuntu 16.04.
-
Отдельный файл блока сервера Nginx для вашего домена, созданный с помощьюthis Nginx server blocks tutorial for Ubuntu 16.04. В этом руководстве будет использоваться
/etc/nginx/sites-available/example.com
.
[[step-1 -—- install-certbot]] == Шаг 1. Установка Certbot
Первым шагом к использованию Let Encrypt для получения SSL-сертификата является установка программного обеспечения Certbot на ваш сервер.
Certbot находится в очень активной разработке, поэтому пакеты Certbot, предоставляемые Ubuntu, как правило, устарели. Однако разработчики Certbot поддерживают программный репозиторий Ubuntu с последними версиями, поэтому мы будем использовать этот репозиторий.
Сначала добавьте хранилище.
sudo add-apt-repository ppa:certbot/certbot
Вам нужно будет нажатьENTER
для подтверждения. Затем обновите список пакетов, чтобы получить информацию о пакете нового репозитория.
sudo apt-get update
И, наконец, установите пакет Certbot Nginx сapt-get
.
sudo apt-get install python-certbot-nginx
Certbot теперь готов к использованию, но для того, чтобы настроить SSL для Nginx, нам нужно проверить некоторые настройки Nginx.
[[step-2 -—- confirm-nginx-39-s-configuration]] == Шаг 2 - Подтверждение конфигурации Nginx
Certbot должен быть в состоянии найти правильный блокserver
в вашей конфигурации Nginx, чтобы он мог автоматически настраивать SSL. В частности, он делает это путем поиска директивыserver_name
, которая соответствует домену, для которого вы запрашиваете сертификат.
Если вы следовали предварительному руководству поNginx server blocks, у вас должен быть серверный блок для вашего домена в/etc/nginx/sites-available/example.com
с уже установленной директивойserver_name
соответствующим образом.
Чтобы проверить, откройте файл блока сервера для вашего домена с помощьюnano
или вашего любимого текстового редактора.
sudo nano /etc/nginx/sites-available/example.com
Найдите существующую строкуserver_name
. Это должно выглядеть так:
/etc/nginx/sites-available/example.com
. . .
server_name example.com www.example.com;
. . .
Если это так, вы можете выйти из редактора и перейти к следующему шагу.
Если это не так, обновите его, чтобы соответствовать. Затем сохраните файл, выйдите из редактора и проверьте синтаксис изменений конфигурации.
sudo nginx -t
Если вы получили ошибку, снова откройте файл блока сервера и проверьте, нет ли опечаток или пропущенных символов. Как только синтаксис вашего файла конфигурации будет правильным, перезагрузите Nginx, чтобы загрузить новую конфигурацию.
sudo systemctl reload nginx
Certbot теперь может найти правильный блокserver
и обновить его.
Затем мы обновим наш брандмауэр, чтобы разрешить HTTPS-трафик.
[[step-3 -—- Allow-https-through-the-firewall]] == Шаг 3. Разрешение HTTPS через брандмауэр
Если у вас включен брандмауэрufw
, как рекомендовано в руководствах по предварительным требованиям, вам необходимо изменить настройки, чтобы разрешить трафик HTTPS. К счастью, Nginx регистрирует несколько профилей сufw
при установке.
Вы можете увидеть текущие настройки, набрав:
sudo ufw status
Вероятно, это будет выглядеть так, что означает, что веб-серверу разрешен только HTTP-трафик:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Чтобы дополнительно включить HTTPS-трафик, мы можем разрешить полный профиль Nginx, а затем удалить избыточный допуск профиля HTTP Nginx:
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
Ваш статус должен выглядеть следующим образом:
sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Теперь мы готовы запустить Certbot и получить наши сертификаты.
[[шаг-4 -—- получение-an-ssl-сертификата]] == Шаг 4 - Получение сертификата 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.
Давайте закончим тестированием процесса обновления.
[[step-5 -—- verifying-certbot-auto-Renewal]] == Шаг 5. Проверка автоматического продления Certbot
Сертификаты Let's Encrypt действительны только в течение девяноста дней. Это должно стимулировать пользователей автоматизировать процесс обновления их сертификатов. Установленный нами пакетcertbot
позаботится об этом, добавив сценарий обновления в/etc/cron.d
. Этот скрипт запускается два раза в день и автоматически обновляет любой сертификат, срок действия которого истекает в течение тридцати дней.
Чтобы протестировать процесс обновления, вы можете выполнить пробный запуск сcertbot
:
sudo certbot renew --dry-run
Если вы не видите ошибок, все готово. При необходимости Certbot обновит ваши сертификаты и перезагрузит Nginx, чтобы получить изменения. Если процесс автоматического продления не удастся, Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты, предупреждая вас, когда ваш сертификат скоро истечет.
Заключение
В этом руководстве вы установили клиент Let’s Encryptcertbot
, загрузили сертификаты SSL для своего домена, настроили Nginx для использования этих сертификатов и настроили автоматическое обновление сертификатов. Если у вас есть дополнительные вопросы об использовании Certbot,their documentation - хорошее место для начала.