Как защитить Nginx с помощью Let’s Encrypt на CentOS 7

Вступление

Let’s Encrypt - это новый центр сертификации (CA), который предоставляет простой способ получения и установки бесплатных сертификатов TLS / SSL, тем самым обеспечивая зашифрованный HTTPS на веб-серверах. Это упрощает процесс, предоставляя программный клиент Certbot, который пытается автоматизировать большинство (если не все) необходимых шагов. В настоящее время весь процесс получения и установки сертификата полностью автоматизирован на веб-серверах Apache и Nginx.

В этом руководстве мы покажем вам, как использовать клиентcertbot Let's Encrypt, чтобы получить бесплатный сертификат SSL и использовать его с Nginx на CentOS 7. Мы также покажем вам, как автоматически обновить ваш сертификат SSL.

Предпосылки

Прежде чем следовать этому уроку, вам понадобится несколько вещей.

  • Сервер CentOS 7 с пользователем без полномочий root с правамиsudo. Вы можете узнать, как создать такую ​​учетную запись пользователя, выполнив шаги 1-3 в нашемinitial server setup for CentOS 7 tutorial.

  • Вы должны владеть или контролировать зарегистрированное доменное имя, с которым вы хотите использовать сертификат. Если у вас еще нет зарегистрированного доменного имени, вы можете зарегистрировать его у одного из множества регистраторов доменных имен (например, Namecheap, GoDaddy и т. Д.).

  • DNSA Record, который указывает вашему домену на общедоступный IP-адрес вашего сервера. Это необходимо из-за того, что Let’s Encrypt подтверждает, что вы являетесь владельцем домена, для которого выдается сертификат. Например, если вы хотите получить сертификат дляexample.com, этот домен должен разрешиться на ваш сервер, чтобы процесс проверки работал. Наша установка будет использоватьexample.com иwww.example.com в качестве доменных имен, поэтомуboth DNS records are required.

Как только у вас будут все необходимые условия, давайте перейдем к установке клиентского программного обеспечения Let Encrypt.

[[step-1 -—- install-the-certbot-let-39-s-encrypt-client]] == Шаг 1. Установка Certbot Let's Encrypt Client

Первым шагом к использованию Let's Encrypt для получения сертификата SSL является установка программного обеспеченияcertbot на ваш сервер. В настоящее время лучший способ установить это через репозиторий EPEL.

Разрешите доступ к репозиторию EPEL на вашем сервере, набрав:

sudo yum install epel-release

После включения репозитория вы можете получить пакетcertbot-nginx, набрав:

sudo yum install certbot-nginx

Клиентcertbot Let's Encrypt установлен и готов к использованию.

[[step-2 -—- setting-up-nginx]] == Шаг 2. Настройка Nginx

Если вы еще не установили Nginx, вы можете сделать это сейчас. Репозиторий EPEL уже должен быть включен из предыдущего раздела, поэтому вы можете установить Nginx, набрав:

sudo yum install nginx

Затем запустите Nginx, используяsystemctl:

sudo systemctl start nginx

Certbot может автоматически настраивать SSL для Nginx, но он должен быть в состоянии найти правильный блокserver в вашей конфигурации. Для этого он ищет директивуserver_name, соответствующую домену, для которого вы запрашиваете сертификат. Если вы начинаете с новой установки Nginx, вы можете обновить файл конфигурации по умолчанию:

sudo vi /etc/nginx/nginx.conf

Найдите существующую строкуserver_name:

/etc/nginx/sites-available/default

server_name _;

Замените символ подчеркивания_ на свое доменное имя:

/etc/nginx/nginx.conf

server_name example.com www.example.com;

Сохраните файл и выйдите из редактора. Проверьте синтаксис ваших изменений конфигурации:

sudo nginx -t

Если это работает без ошибок, перезагрузите Nginx для загрузки новой конфигурации:

sudo systemctl reload nginx

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

[[step-3 -—- update-the-firewall]] == Шаг 3 - Обновление брандмауэра

Если у вас включен брандмауэр, убедитесь, что порты 80 и 443 открыты для входящего трафика. Если вы не используете брандмауэр, вы можете пропустить его.

Если у вас запущен брандмауэрfirewalld, вы можете открыть эти порты, набрав:

sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=https
sudo firewall-cmd --runtime-to-permanent

Если у вас запущен брандмауэрiptables, команды, которые вам нужно запустить, сильно зависят от вашего текущего набора правил. Для базового набора правил вы можете добавить доступ по HTTP и HTTPS, набрав:

sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Теперь мы готовы запустить Certbot и получить наши сертификаты.

[[шаг-4 -—- получение-сертификата]] == Шаг 4 - Получение сертификата

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 HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
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:// и обратите внимание на индикатор безопасности своего браузера. Это должно означать, что сайт защищен должным образом, обычно с зеленым значком замка.

[[step-5 -—- update-diffie-hellman-parameters]] == Шаг 5 - Обновление параметров Диффи-Хеллмана

Если вы сейчас протестируете свой сервер с помощьюSSL Labs Server Test, он получит только оценкуB из-за слабых параметров Диффи-Хеллмана. Это влияет на безопасность первоначального обмена ключами между нашим сервером и его пользователями. Мы можем исправить это, создав новый файлdhparam.pem и добавив его в наш блокserver.

Создайте файл, используяopenssl:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

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

sudo vi /etc/nginx/nginx.conf

Вставьте следующую строку в любом месте блокаserver:

/etc/nginx/nginx.conf

. . .
ssl_dhparam /etc/ssl/certs/dhparam.pem;

Сохраните файл и выйдите из редактора, затем проверьте конфигурацию:

sudo nginx -t

Если у вас нет ошибок, перезагрузите Nginx:

sudo systemctl reload nginx

Ваш сайт стал более безопасным и должен получить рейтингA.

[[step-6 -—- setting-up-auto-продление]] == Шаг 6. Настройка автоматического продления

Сертификаты Let's Encrypt действительны только в течение девяноста дней. Это должно стимулировать пользователей автоматизировать процесс обновления их сертификатов. Нам нужно настроить регулярно запускаемую команду, чтобы проверять срок действия сертификатов и обновлять их автоматически.

Чтобы выполнять проверку обновлений ежедневно, мы будем использоватьcron, стандартную системную службу для выполнения периодических заданий. Мы сообщаемcron, что делать, открывая и редактируя файл с именемcrontab.

sudo crontab -e

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

кронтаб

. . .
15 3 * * * /usr/bin/certbot renew --quiet

Часть15 3 * * * в этой строке означает «запускать следующую команду в 3:15 каждый день». Вы можете выбрать в любое время.

Командаrenew для Certbot проверит все сертификаты, установленные в системе, и обновит все сертификаты, срок действия которых истекает менее чем через тридцать дней. --quiet сообщает Certbot не выводить информацию и не ждать ввода пользователя.

cron теперь будет запускать эту команду ежедневно. Все установленные сертификаты будут автоматически обновляться и перезагружаться по истечении тридцати дней или меньше до истечения срока их действия.

[.note] # Для получения дополнительной информации о том, как создавать и планировать задания cron, вы можете ознакомиться с нашим руководствомHow to Use Cron to Automate Tasks in a VPS.
#

Заключение

В этом руководстве мы установили клиент Let’s Encryptcertbot, загрузили сертификаты SSL для нашего домена, настроили Nginx для использования этих сертификатов и настроили автоматическое продление сертификатов. Если у вас есть дополнительные вопросы об использовании Certbot,their documentation - хорошее место для начала.

Related