Установка letsencrypt nginx centos 7

Добрый день, ребзя!
Сегодня я расскажу вам, как я делал для своих сайтов редирект с http на https.
Я использовал два разных способа, мне было интересно сделать все в ручную, но оказалось, есть так-же удобные плагины для автоматической настройки редиректа всего в 5-6 кликов.(отличная фича для хомячков)

Способ первый

В процессе поиска howto я забрел на сайт letsencrypt.org и увидел интересную строчку:

Вообще не очень радуюсь установке стороннего софта, но раз источник предлагает, значит доверять можно.
Перейдя на сайт, certbot, был приятно удивлен возможностям их установщика, а так-же подробным инструкциям по установке.

install

Certboot упакован в EPEL (extra packages for enterprise Linux). Перед использованием Certbot нужно активировать EPEL репозиторий.

После установим Certbot командой:

sudo yum install python2-certbot-nginx

Get Started

sudo certbot --nginx

После использования этой команды, запуститься certbot помощник, который пошагово, проверит/скачает/установит/запишет в конфиг нужные строки. Весь процесс автоматизирован.
Однако, есть пара нюансов.
1. Вы не можете получить одновременно один сертификат для двух доменов сразу (что было бы удобным)
2. Бот заполнят только нужную для работы https строки конфига. (т.е в дальнейшем, все равно придется вводить хот фиксы)

Если для вас это не критично, как и для меня, смело скипайте эти warning сообщения.
В итоге, получился вот такой .conf файл.

Для сравнения добавил конфиг, смодерированный ручками. Справедливо, что все, чем он отличается — это дополнительные настройки, которые можно вписать и в тот конфигурационный файл.
Но! Если вы сразу сделаете хорошо, то лишний раз закрепите в себе знания, что значит каждая из строчек и нужна ли она вообще.

Способ дыва

Начнем с установки git и bc

sudo yum -y install git bc

Теперь командой

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

создадим клон проекта letsencrypt из GitHub. Сама директория будет в /opt/letsencrypt

Установка сертификата

Перейдем в директорию letsencrypt

cd /opt/letsencrypt

и введем команду:

./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d yourdomain.ru -d www.yourdomain.ru

-d yourdomain.ru ; -d www.yourdomain.ru — наши домены
—webroot-path=/usr/share/nginx/html — путь, где лежат файлы нашего сайта (index.html и etc)

Если letsencrypt используется впервые, то, вероятнее всего, нужно будет ввести дополнительные данные в всплывающих окнах(да-да).
1. email адрес для важных сообщений
2. согласиться с условиями использования Letsencrypt

Если все прошло успешно увидим такое сообщение:

Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for yourdomain.ru
Using the webroot path /var/www/yourdomain.ru/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/yourdomain.ru/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/yourdomain.ru/privkey.pem
Your cert will expire on 2019-02-04. To obtain a new or tweaked
version of this certificate in the future, simply run
letsencrypt-auto again. To non-interactively renew *all* of your
certificates, run "letsencrypt-auto renew"
- 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

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

Если вы получили ошибки, типа: Failed to connect to host for DVSNI challenge, настройте firewall вашего сервера, что бы TCP трафик проходил по портам 80 и 443.

После получения сертификатов, у вас появятся файлы в кодировке .pem, а именно:

cert.pem — сертификат для вашего домена
chain.pem — Let’s Encrypt цепь сертификатов
fullchain.pem — cert.pem и chain.pem
privkey.pem — Сертификат с приватным ключом

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

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

Это необходимо, чтобы у нас работал Forward Secrecy.
Процесс займет некоторое время, после чего ключ будет помещен в каталог /etc/ssl/certs/dhparam.pem

Теперь можно вернуться к спойлеру: «.conf by hands» и настроить конфиг под себя.
После чего перезагрузим nginx.

systemctl reload nginx

Автоматическое обновление сертификатов.

Сертификаты действуют 90 дней. Рекомендованное время автообновления сертификатов 60 дней.
Чтобы вручную запустить процесс обновления сертификатов, введите команду:

/opt/letsencrypt/letsencrypt-auto renew

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

Processing /etc/letsencrypt/renewal/php.stas.hell-dev.ru-0001.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not yet due for renewal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/rust.stas.hell-dev.ru-0001.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not yet due for renewal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The following certs are not due for renewal yet:
/etc/letsencrypt/live/php.stas.hell-dev.ru-0001/fullchain.pem expires on 2019-02-02 (skipped)
/etc/letsencrypt/live/rust.stas.hell-dev.ru-0001/fullchain.pem expires on 2019-02-04 (skipped)
No renewals were attempted.

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

А теперь отредактируем файл crontab для автоматического обновления сертификатов.

crontab -e

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

30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log 
35 2 * * 1 /usr/bin/systemctl reload nginx

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