Вступление
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 - хорошее место для начала.