Получение SSL-сертификата Let's Encrypt для домена с помощью Certbot

В этой статье рассмотрим процесс получения SSL-сертификата Let's Encrypt для домена с помощью Certbot. Для этого должны быть выполнены все настройки, описанные в предыдущей статье. Напомню, что все действия связаны с работой сервера, настроенного на работу в в связке Apache+NGiNX. Описанные действия должны работать и при одиночно установленном NGiNX. Все действия лучше проводить в описанной последовательности. Тесты должны проходить без ошибок.



Небольшая ремарка о доменном имени, используемого в качестве примера

Действия, описанные ниже, приводятся для домена mb4.ru. Вместо него нужно подставлять то доменное имя, для которого требуется получить SSL-сертификат Let's Encrypt.

Тест получения SSL-сертификата Let's Encrypt для домена с помощью Certbot

Let's Encrypt ограничивает количество обращений за сертификатами, потому сначала попробуем получить необходимый сертификат в режиме для тестов командой certbot certonly --dry-run -d mb4.ru -d www.mb4.ru:

# certbot certonly --dry-run -d mb4.ru -d www.mb4.ru
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for mb4.ru
http-01 challenge for www.mb4.ru
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Running post-hook command: service nginx reload

IMPORTANT NOTES:
 - The dry run was successful.

Если тест проходит без ошибок, то последняя строчка должна быть именно такой:  - The dry run was successful. Если тест выявляет какие-то ошибки в настройках сервера, которые не дают ему полностью провести все действия для имитации получения SSL-сертификата, нужно внимательно изучить все сообщения в блоке IMPORTANT NOTES:, исправить их и провести тест вторично. И так до тех пор, пока все ошибки не будут устранены и тест начнёт заканчиваться строкой, указанной выше. В работе над устранением ошибок получения SSL-сертификата может помочь чтение логов Let's Encrypt, которые пишутся в /var/log/letsencrypt/letsencrypt.log.

Получения SSL-сертификата Let's Encrypt для домена с помощью Certbot

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

Команда Certbot для запуска процесса получения реальных SSL-сертификатов Let's Encrypt для домена выглядит следующим образом: certbot certonly -d mb4.ru -d www.mb4.ru. Дополнительные домены и поддомены можно дописать через пробел с использованием параметра -d. Выполнение этой команды проходит следующим образом:

# certbot certonly -d mb4.ru -d www.mb4.ru
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for mb4.ru
http-01 challenge for www.mb4.ru
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Running post-hook command: service nginx reload

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

В папке /etc/letsencrypt/archive появится папка с именем домена, в которой будут лежать полученные сертификты:

tree /etc/letsencrypt/archive
/etc/letsencrypt/archive
└── mb4.ru
    ├── cert1.pem
    ├── chain1.pem
    ├── fullchain1.pem
    └── privkey1.pem

1 directory, 4 files

А также будет создана папка с доменным именем в /etc/letsencrypt/live в которой будут храниться символические ссылки на файлы ключей:

# tree /etc/letsencrypt/live
/etc/letsencrypt/live
├── mb4.ru
│   ├── cert.pem -> ../../archive/mb4.ru/cert1.pem
│   ├── chain.pem -> ../../archive/mb4.ru/chain1.pem
│   ├── fullchain.pem -> ../../archive/mb4.ru/fullchain1.pem
│   ├── privkey.pem -> ../../archive/mb4.ru/privkey1.pem
│   └── README
└── README

1 directory, 6 files

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

Проверка полученных SSL-сертификатов Let's Encrypt для домена с помощью Certbot

С помощью утилиты openssl можно проверить полученные и хранящиеся на сервере SSL-сертификаты:

# openssl x509 -text -in /etc/letsencrypt/live/mb4.ru/cert.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            ...
        Signature Algorithm: ...
        Issuer: C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
        Validity
            Not Before: Jun  3 10:54:33 2019 GMT
            Not After : Sep  1 10:54:33 2019 GMT
        Subject: CN = mb4.ru
...

И ещё много дополнительной информации. Для того, чтобы просто получить список доменов, на которые получены SSL-сертификаты, проще воспользоваться командой:

# cat /etc/letsencrypt/live/*/cert.pem | openssl x509 -text | grep -o 'DNS:[^,]*' | cut -f2 -d:
mb4.ru
www.mb4.ru

Резюме

SSL сертификаты получены. Теперь их нужно прописать в конфиге виртуальных хостов NGiNX так, чтобы перевести сайты на работу по защищённому протоколу HTTPs.

Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню