Введение

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

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

 

Nginx with Let's Encrypt TLS/SSL Certificate and Auto-renewal

 

Требования

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

Вы должны иметь CentOS 7 сервер с с обычной учетной записью, имеющей sudo привилегии. Вы можете узнать, как настроить такую учетную запись пользователя, выполнив шаги 1-3 в нашей первоначальной настройке сервера для CentOS 7 руководства.

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

Если вы все еще это не сделали, не забудьте создать А запись, которая направляет ваш домен к IP-адресу вашего сервера. Это необходимо, так как Let's Encrypt проверяет, что вы являетесь владельцем домена для которого выдает сертификат. Например, если вы хотите получить сертификат для example.com, этот домен должен работать с вашего сервера для проверки процесса работы. Наша установка будет использовать example.com и www.example.com в качестве доменных имен, так как требуются обе DNS-записи.

Если вы отвечаете всем требованиям давайте перейдем к установке Let's Encrypt client.

 

Шаг 1. Установка Let's Encrypt клиента

 

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

 

Установка Git и bc

Давайте сейчас установим Git, чтобы мы могли скопировать репозиторий Let's Encrypt.

 

Установка git и bc пакетов с yum:

$ sudo yum -y install git bc

 

Установив git и bc, мы сможем легко загрузить letsencrypt,копируя репозиторий из GitHub.

 

Копирование Let's Encrypt

 

Теперь мы можем скопировать репозиторий Let's Encrypt в /opt следующей командой:

$ sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

 

Теперь вы должны иметь копию репозитория letsencrypt в каталоге /opt/letsencrypt.

 

Шаг 2. Приобретение сертификата

Let's Encrypt предоставляет множество способов получить SSL сертификаты, с помощью различных плагинов. В отличие от плагина Apache, который описан в другом руководстве, большинство плагинов только помогут вам получить сертификат, который необходимо вручную настроить для использования на вашем веб-сервере. Плагины, которые только приобретают сертификаты, но не устанавливают их, упоминаются как "аутентификаторы", так как они используются для проверки подлинности - будет ли сертификат выдан на сервер.

Мы покажем вам, как использовать плагин Webroot, чтобы получить SSL сертификат.

Как использовать плагин Webroot

Плагин Webroot работает, помещая специальный файл в каталог /.well-known в пределах корневого каталога, который может быть открыт (через веб-сервер) службой проверки Let's Encrypt. В зависимости от конфигурации, вам может понадобиться разрешить доступ к каталогу /.well-known.

 

Если вы еще не установили Nginx, сначала установите репозиторий epel-release:

$ sudo yum -y install epel-release

 

Далее установите Nginx с помощью следующей команды:

$ sudo yum -y install nginx

 

Для того, чтобы убедиться, что каталог доступен для проверки Let's Encrypt, давайте сделаем быстрые изменения в вашему блоку сервера Nginx по умолчанию. Файл конфигурации Nginx по умолчанию позволяет легко добавлять директивы к блоку сервера порт 80 путем добавления файлов в каталоге /etc/nginx/default.d. Если вы используете конфигурацию по умолчанию, создайте новый файл с именем le-well-known.conf и откройте его для редактирования с помощью следующей команды:

$ sudo vi /etc/nginx/default.d/le-well-known.conf

 

Затем вставьте эти строки:

location ~ /.well-known {
       allow all;
}

Сохраните и выйдите.

 

Запустите Nginx с помощью этой команды:

$ sudo systemctl restart nginx

 

Если вы не используете блок сервера по умолчанию, вам нужно будет посмотреть, что ваш корневой документ установлен - путем поиска корневой директивы в вашем блоке сервера Nginx по умолчанию. Это значение, которое требует Let's Encrypt, как webroot-path, при использовании плагина Webroot. Корень по умолчанию /usr/share/nginx/html.

Теперь, когда мы знаем наш webroot-path, мы можем использовать плагин Webroot, чтобы запросить SSL сертификат с этими командами. Здесь мы также указываем свои доменные имена с опцией -d. Если вы хотите один сертификат для работы с несколькими доменными именами (например, example.com и www.example.com), не забудьте все их добавить. Кроме того, убедитесь, что вы заменяете выделенные части соответствующим путем webroot и доменными именами:

$ cd /opt/letsencrypt

$ ./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com -d www.example.com

Примечание: Программное обеспечения Let's Encrypt требует привилегий суперпользователя, так что вам будет необходимо ввести свой пароль, если в последнее время вы не использовали sudo.

После того, как letsencrypt установится, Вам будет предложено ввести кое-какую информацию. Точные запросы могут варьироваться в зависимости от того, использовали ли вы Let's Encrypt раньше, но мы покажем вам пример для первого раза.

В командной строке введите адрес электронной почты, который будет использоваться для уведомлений и восстановление потерянных ключей:

 

 

Email prompt

 

Далее вы должны согласится с Договором Подписчика. Нажмите Agree:

 

 

Let's Encrypt Subscriber's Agreement

 

Если все прошло успешно, вы должны увидеть вывод сообщения, которое выглядит примерно так:

 

Output:

IMPORTANT NOTES:

- If you lose your account credentials, you can recover through

  e-mails sent to [email protected]

- Congratulations! Your certificate and chain have been saved at

  /etc/letsencrypt/live/example.com/fullchain.pem. Your

  cert will expire on 2016-03-15. To obtain a new version of the

  certificate in the future, simply run Let's Encrypt again.

- Your account credentials have been saved in your Let's Encrypt

  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 Let's

  Encrypt so making regular backups of this folder is ideal.

- If like Let's Encrypt, please consider supporting our work by:

 

  Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate

  Donating to EFF:                      https://eff.org/donate-le

 

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

Примечание Firewall: Если вы получаете сообщение об ошибке типа Не удалось подключиться к хосту для DVSNI задачи, firewall вашего сервера может потребоваться настроить так, чтобы разрешить TCP трафик через порты 80 и 443.

Примечание: Если ваш домен направлен через службу DNS, такую как CloudFlare, вам нужно будет временно отключить её, пока вы не получили сертификат.

 

Файлы сертификата

 

После приобретения сертификата, вы будете иметь следующие файлы в PEM-кодировке:

 

  • cert.pem: Сертификат вашего домена

  • chain.pem: Цепочка Let's Encrypt сертификатов

  • fullchain.pem: Скомбинированные cert.pem и chain.pem

  • privkey.pem: Закрытый ключ вашего сертификате

 

Важно, чтоб вы знали о местонахождении файлов сертификата, которые только что были созданы, так как вы можете использовать их в конфигурации веб-сервера. Сами файлы помещаются в подкаталог /etc/letsencrypt/archive.Тем не менее, Let's Encrypt создает символические ссылки на самые последние файлы сертификатов в каталоге /etc/letsencrypt/live/your_domain_name.Поскольку ссылки всегда будут указывать на самые последние файлы сертификатов, то это тот путь, который вы должны использовать, чтобы обратиться к файлам сертификатов.

 

Вы можете проверить, существуют ли файлы, выполнив эту команду (замена в доменном имени):

$ sudo ls -l /etc/letsencrypt/live/your_domain_name

 

Выводом должны быть четыре упомянутые выше файлы сертификатов. В данный момент, вы будете настраивать веб-сервер, чтобы использовать fullchain.pem как файл сертификата и privkey.pem как файл ключа сертификата.

 

Генерируем сильные группы Диффи-Хеллмана

В целях дальнейшего повышения уровня безопасности, вы должны также сформировать сильную группу Диффи-Хеллмана. Чтобы сгенерировать 2048-битный группу, используйте следующую команду:

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

 

Это может занять несколько минут, но когда будет сделано вы будете иметь сильную группу DH в /etc/ssl/certs/dhparam.pem.

 

Шаг 3. Настройка TLS/SSL на веб-сервере (Nginx)

Теперь вы должны изменить конфигурацию Nginx, чтобы использовать файлы сертификатов Let's Encrypt. Конфигурация Nginx по умолчанию на CentOS довольно открытого состава, но мы создадим новый блок сервера, который использует SSL/TLS и прослушивает порт 443. Затем мы настроим блок сервера по умолчанию (HTTP на 80 порту) для перенаправления блок сервера с поддержкой HTTPS.

 

По умолчанию дополнительная конфигурация блока сервера может быть размещена в /etc/nginx/conf.d. Создайте новый файл с именем ssl.conf и откройте его для редактирования с помощью следующей команды:

$ sudo vi /etc/nginx/conf.d/ssl.conf

 

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

 

server {
       listen 443 ssl;

       server_name example.comwww.example.com;

       ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
       ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

       ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
       ssl_prefer_server_ciphers on;
       ssl_dhparam /etc/ssl/certs/dhparam.pem;
       ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
       ssl_session_timeout 1d;
       ssl_session_cache shared:SSL:50m;
       ssl_stapling on;
       ssl_stapling_verify on;
       add_header Strict-Transport-Security max-age=15768000;

       location ~ /.well-known {
               allow all;
       }

       # The rest of your server block
       root /usr/share/nginx/html;
       index index.html index.htm;

       location / {
               # First attempt to serve request as file, then
               # as directory, then fall back to displaying a 404.
               try_files $uri $uri/ =404;
               # Uncomment to enable naxsi on this location
               # include /etc/nginx/naxsi.rules
       }
}

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

 

Файл конфигурации Nginx по умолчанию позволяет легко добавлять директивы к блоку сервера порт 80 путем добавления файлов в каталоге /etc/nginx/default.d. Создайте новый файл с именем ssl-redirect.conf и откройте его для редактирования с помощью следующей команды:

$ sudo vi /etc/nginx/default.d/ssl-redirect.conf

 

Далее вставьте следующую строку: 

return 301 https://$host$request_uri;

 

Сохраните и выйдите. Это настроит HTTP в блоке сервера порт 80 (по умолчанию) для перенаправления входящих запросов на HTTPS.

Теперь перегрузите Nginx:

$ sudo systemctl reload nginx

 

Вы также захотите включить Nginx, чтоб он стартовал при загрузке сервера:

$ sudo systemctl enable nginx

 

Сертификат Let's Encrypt TLS/SSL теперь на месте. На данном этапе вы должны проверить, что TLS/SSL-сертификат работает, посетив ваш домен через HTTPS в веб-браузере.

Вы можете использовать отчет Qualys SSL Labs, чтобы увидеть оценки конфигурации вашего сервера:

В веб-браузере:

https://www.ssllabs.com/ssltest/analyze.html?d=example.com

Эта установка SSL должна выдавать рейтинг A+.

 

Шаг 4. Настройка автопродления

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

 

Чтобы запустить процесс обновления для всех установленных доменов, выполните следующую команду:

$ /opt/letsencrypt/letsencrypt-auto renew

 

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

 

Output:

Checking for new version...

Requesting root privileges to run letsencrypt...

 /root/.local/share/letsencrypt/bin/letsencrypt renew

Processing /etc/letsencrypt/renewal/example.com.conf

 

The following certs are not due for renewal yet:

/etc/letsencrypt/live/example.com/fullchain.pem (skipped)

No renewals were attempted.

 

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

 

Практический способ убедиться, что ваши сертификаты не будут устаревать -  это создать cron задачу, которая будет периодически выполнять автоматическую команду продления для вас. Поскольку обновление сначала проверяет на дату истечения срока действия и только выполняет обновление сертификата менее чем за 30 дней от истечения срока действия, безопасно создать cron задачу, которая работает каждую неделю или даже каждый день, например.

 

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

$ sudo crontab -e

 

Добавьте следующие строки:

30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log

35 2 * * 1 /etc/init.d/nginx reload

Сохраните и выйдите. Это создаст новую cron задачу, которая будет выполнять letsencrypt-auto renew команду каждый понедельник в 2:30 утра, и перезагружать Nginx в 2:35 утра (поэтому обновленный сертификат будет использоваться). Вывод, генерируемый командой будет поступать в лог-файл, расположенный в /var/log/le-renewal.log.

 

Шаг 5. Обновление Let’s Encrypt клиента (не обязательно)

Каждый раз, когда будут доступны новые обновления для клиента, вы можете обновить локальную копию, запустив git pull изнутри каталога Let’s Encrypt:

$ cd /opt/letsencrypt

$ sudo git pull

 

Это позволит загрузить все последние изменения в хранилище, обновив ваш клиент.

Заключение

На этом все! Ваш веб-сервер теперь использует бесплатный Let's Encrypt TLS/SSL сертификат для безопасного обслуживания контента по протоколу HTTPS.

Помог ли вам данный ответ? 0 Пользователи нашли это полезным (0 голосов)