Pull to refresh

Let's Encrypt: получение сертификата по шагам

Reading time 4 min
Views 451K
В данной статье будет описан реальный способ получения сертификата от Let's Encrypt в ручном режиме для его дальнейшей установки на веб-сервер Windows (IIS/Microsoft Azure) или Linux (полностью ручной режим). Из-за отсутствия официального клиента под Windows для генерации сертификата будет использоваться дистрибутив Linux.



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

Как это работает


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

Смысл программного набора Automated Certificate Management Environment (ACME) (написан на Python) в том, чтобы автоматизировать генерацию и установку сертификата в Linux-окружении.

Существует неофициальный Windows-клиент с открытыми исходными кодами, который может генерировать и устанавливать сертификаты на Windows IIS и Amazon Web Services, но у нас была задача получить ключи и установить их вручную. Предлагаю любому желающему написать статью по работе с ним.

Процесс по шагам (на январь 2024 г.)


На текущий момент можно использовать WSL вместо Linux в составе Windows 10/11.
Для этого достаточно запустить терминал в режиме администратора и написать:
wsl --install

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


1. Устанавливаем Snapd

2. Далее запускаем:
sudo snap install --classic certbot

3. И привязываем команды:
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Проверку домена можно осуществить в нескольких режимах:

4 (1). По текстовой записи у домена в DNS:

sudo certbot certonly --authenticator manual --preferred-challenges dns

4 (2). По текстовому ответу (OK 200, text/plain) по адресу http://(ваш домен):80/.well-known/acme-challenge/{путь}

sudo certbot certonly --authenticator manual

Старый способ (2017 г., новый клиент CertBot)
Небольшое обновление статьи в 2017 году.
Теперь можно установить CertBot и получить сертификат в ручном режиме.

Краткая инструкция:

1. Скачиванием дистрибутив

wget https://dl.eff.org/certbot-auto

2. Установка прав на файл

chmod a+x certbot-auto

3. Запуск для получения сертификата в ручном режиме

./certbot-auto certonly --authenticator manual

4. Следуйте указаниям программы (подробнее смотрите в полной инструкции ниже с шага № 4).


Старая инструкция
Подробная инструкция (старый клиент — всё ещё работает)

Использовалась официальная инструкция.
Пользователи Linux могут использовать текст ниже как пример генерации сертификата в ручном режиме.

1. Запустите ваш любимый дистрибутив Linux (мы использовали Debian 8).

либо 2. Установите Git и выполните команды ниже:

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

или 2. Скачайте и распакуйте в папку данный архив и перейдите в эту папку

3. Запустите установку и генерацию с помощью

./letsencrypt-auto --agree-dev-preview --server \https://acme-v01.api.letsencrypt.org/directory -a manual auth

Вам будет предложено ввести электронную почту для восстановления в будущем.
Ключ -a manual позволит сгенерировать ключи в ручном режиме без их автоматической установки на веб-сервер.

4. Далее введите домены для которых вы хотите создать сертификаты


5. Подтвердите сохранение вашего адреса в логах Let's Encrypt


6. Подтвердите владение доменом


В сентябре 2016 года произошли небольшие изменения в порядке получения сертификата. Спасибо toxi_roman за обновление.



Ещё более старый способ подтверждения с text/plain (не актуально по состоянию на октябрь 2016 г.)
Это один из ответственных моментов в режиме ручной регистрации.
Обратите внимание: нас просят создать ответ на запрос, который возвращает Content-Type text/plain.

Такой ответ не пройдёт и подтверждение выдаст ошибку:


Нужно, чтобы было так:



Если у вас приложение ASP.NET CORE (Minimal API):

app.MapGet(".well-known/acme-challenge/{id}", (HttpRequest request) =>
{
return "ваш ключ";
});


Если у вас сервер на Windows IIS (с поддержкой Razor Views, аналогично и с MVC), то для создания правильного ответа:
а) создать папку .well-known и в ней папку acme-challenge
б) поместить туда файл [запрос].cshtml
в) в содержание этого файла добавить:
@{Response.ContentType = "text/plain";Response.Charset = "";}здесь проверочный код

-> После успешной проверки, будут созданы следующие сертификаты в папке /etc/letsencrypt/live/[имя домена]:

privkey.pem — приватный ключ для сертификата
Используется Apache для SSLCertificateKeyFile и nginx для ssl_certificate_key.

cert.pem (сертификат сервера)
Используется Apache для SSLCertificateFile.

chain.pem (сертификат цепочки)
Он же используется Apache для SSLCertificateChainFile.

fullchain.pem (соединение chain.pem и cert.pem)
Он же используется nginx для ssl_certificate.

-> Теперь пришло время сконвертировать его в родной для Windows .pfx формат.
Перейдите в папку /etc/letsencrypt/live/[имя домена] (откройте терминал в режиме администратора с помощью команды su):

cd /etc/letsencrypt/live/[имя домена]

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

openssl

и начните конвертацию с помощью команды:

pkcs12 -inkey privkey.pem -in fullchain.pem -export -out mydomain.pfx

Вас попросят ввести пароль и подтвердить его.



-> Выходим из OpenSSL с помощью команды quit

-> Копируем итоговый файл в директорию нашего пользователя
cp --no-preserve=all mydomain.pfx /home/(имя пользователя)/Documents

-> Мы получили сертификат mydomain.pfx, который теперь можем использовать в Windows-окружении.

Для обновления сертификата в ручном режиме:
./letsencrypt-auto certonly --renew-by-default -a manual

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

Буду рад услышать ваши замечания или пожелания к статье.
Only registered users can participate in poll. Log in, please.
Планируете ли вы использовать сертификаты от Let's Encrypt в своих проектах
83.79% Да 1163
8.79% Нет, я использую альтернативный сертификат (StartSSL, CloudFlare Flexible SSL) 122
4.68% Нет, у меня уже есть платный сертификат 65
2.74% Другой вариант 38
1388 users voted. 290 users abstained.
Tags:
Hubs:
+30
Comments 49
Comments Comments 49

Articles