Certbot где лежат сертификаты
Перейти к содержимому

Certbot где лежат сертификаты

  • автор:

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

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

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

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

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

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

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

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

Процесс по шагам

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

[11/01/17] Новый клиент CertBot

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

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

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.

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

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

Если у вас сервер на Windows (с поддержкой Razor Views, аналогично и с MVC), то самый простой способ создания правильного ответа:
а) создать папку .well-known и в ней папку acme-challenge
б) поместить туда файл [запрос].cshtml
в) в содержание этого файла добавить:
@здесь проверочный код

7. После успешной проверки, будут созданы следующие сертификаты в папке /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.

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

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

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

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

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

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

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

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

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

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

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

Буду рад услышать ваши замечания или пожелания к статье.

Настройка SSL сертификата Let’s Encrypt для Nginx

date

03.03.2021

user

VyacheslavK

directory

CentOS, Linux

comments

комментария 3

В этой статье мы рассмотрим, как настроить бесплатный TLS/SSL сертфикат Let’s Encrypt для сайта на веб-сервере Nginx на Linux CentOS. Покажем, как выпустить сертификат для одного домена (или wildecard SSL-сертификат для всех поддоменов), настроить автопродление сертфикатов.

Установка certbot — клиента Let’s Encrypt в Linux

Выпускать сертификат Let’s Encrypt мы будем с помощью certbot. Для установка бота, нужно воспользоваться утилитой snapd, если у вас ее нет, установите ее:

# yum install snapd -y

установка snapd в linux

После установки snapd, его нужно добавить, как сервис и создать симлинк для удобства запуска:

# systemctl enable —now snapd.socket
# ln -s /var/lib/snapd/snap /snap

Теперь можно установить certbot:

# sudo snap install —classic certbot

установка certbot в linux через snap

Все также для удобства запуска, создадим симлинк:

# ln -s /snap/bin/certbot /usr/bin/certbot

Выпуск SSL сертификата для Nginx

Чтобы выпустить SSL сертификат для сайта, запустите команду:

# certbot certonly —nginx

Утилита проверит конфигурацию nginx и выдаст все сайты на которые можно установить сертификат (утилита получает список сайтов из конфигурации nginx). В процессе бот будет запрашивать у вас данные, email, домены и тд.

генерация сертификата let

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

Установка SSL сертификата Let’s Encrypt на веб-сайт Nginx

Чтобы SSL сертификат Let’s Encrypt заработал на вашем сайте, нужно использовать следующий конфигурационный файл nginx для вашего домена:

server < listen 443 ssl http2; server_name lets.build-centos.ru; root /var/www/lets.build-centos.ru; index index.php index.html index.htm; access_log /var/www/build-centos.info/log/ssl-access.log main; error_log /var/www/build-centos.info/log/ssl-error.log; keepalive_timeout 60; ssl_certificate /etc/letsencrypt/live/build-centos.info/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/build-centos.info/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 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'; add_header Strict-Transport-Security 'max-age=604800'; location / < try_files $uri $uri/ /index.php?$args; >location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ < access_log off; expires max; >location ~ \.php$ < try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT /var/www/lets.build-centos.ru; fastcgi_param SCRIPT_FILENAME /var/www/lets.build-centos.ru/$fastcgi_script_name; fastcgi_param PATH_TRANSLATED /var/www/lets.build-centos.ru/$fastcgi_script_name; include fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param HTTPS on; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; >location = /favicon.ico < log_not_found off; access_log off; >location = /robots.txt < allow all; log_not_found off; access_log off; >location ~ /\.ht < deny all; >>

Сохраните конфигурационный файл. Выполняем проверку валидности настроек в конфигурационном файле nginx:

[root@server letsencrypt]# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапустите веб-сервер nginx:

# service nginx restart

Теперь, если открыть в браузере сайт по протоколу https, высвечиваться значок защищенного соединения.

Если щёлкнуть по значку сертификата, можно получить полную информацию о нем:

tls сертфикат lets encrypt для сайта на nginx

Для нагруженных PHP сайтов на Nginx можно использоваться связку с php-fpm.

Бесплатные Wildcard SSL сертификаты Let’s Encrypt для поддоменов

Чтобы выпустить wildcard сертификат Let’s Encrypt для всех поддоменов, используется другая команда. Кроме того, в DNS настройках вашего домена нужно создать специальную txt-запись. Чтобы выпустить wildcard сертификат для поддоменов, в директории /opt/letsencrypt/ запустите команду:

# certbot run -a manual -i nginx -d *.lets.build-centos.ru

После запуска команды, вам нужно будет пройти всю процедуру валидации домена, в том числе нужно будет создать специальную TXT запись в DNS.

Не нажимайте “Enter” пока не убедитесь, что запись доступна на глобальных DNS. В панели регистратора домена создайте DNS запись типа TXT с именем _acme-challenge и значением, скопированным из консоли certbot.

letsencrypt-auto certonly wildecard сертфикат для поддоменов

txt запись _acme-challenge для выпуска сертификата для всех поддоменов

Дождитесь обновления информации в DNS, нажмите Enter и wildcard SSL сертификат будет успешно выпущен:

ssl сертификат lets encrypt _acme-challenge

Директория хранения сертификатов и ключей в этом случае отличается от той, в который помещен сертификат для основного домена.

Проверим, работает ли сертификат на поддомене test.build-centos.ru:

wildcard сертфикат lets

Как видно из скриншота, сертификат выпущен корректно и действителен для всех поддоменов.

Продление сертификатов Let’s Encrypt

Сертификаты Let’s Encrypt выдаются на 90 дней, рекомендуется продлевать эти сертификаты каждые 60 дней.

Чтобы перевыпустить устаревший SSL сертификат Let’s Encrypt, используется команда:

# /certbot renew —dry-run

Если запустить команду сразу после того, как вы выпустили сертификаты, появится уведомление, что сертификат не требует перевыпуска:

Cert not yet due for renewal

обновление сертфиката let

Чтобы продление SSL сертификата Let’s Encrypt выполнялось автоматически, нужно добавить задание в cron:

00 00 * * 6 /certbot renew —dry-run >> /var/log/le-renew.log
15 00 * * 6 /usr/bin/systemctl reload nginx

Данный cron job будет пытаться каждую субботу продлить сертификата и выполнять мягкую перезагрузку веб-сервера nginx. Все действия по перевыпуску SSL сертификатов будут фиксироваться в лог файле /var/log/le-renew.log.

Все логи Let’s Encrypt хранятся в директории /var/log/letsencrypt.

Таким образом, мы установили бесплатный SSL сертификат Let’s Encrypt на свой web-сайт, работающий на Nginx.

Бесплатные сертификаты Let’s Encrypt также можно использовать и для сайтов на IIS.

Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

Получение SSL-сертификата от удостоверяющего центра Let’s Encrypt в Debian Stretch

В черновиках скопилось некоторое количество готовых статей, которые хотелось ещё чем-то дополнить, из-за чего они и не были опубликованы своевременно. Например, эта статья была написана аж в октябре 2017 года. О некоторых статьях я уже не помню, чем ещё я хотел их дополнить. Про другие помню, но сейчас их доведение до задуманного вида не является для меня приоритетной задачей. Думаю, что лучше опубликовать всё как есть, а дополнять можно уже впоследствии отдельными статьями.

В последние годы администраторы и пользователи интернет всё чаще обращают внимание на безопасность. Увлечение защищёнными версиями протоколов приняло настолько повальный характер, что некоторые начали перегибать палку и требовать наличия сертификатов даже там, где они вроде бы и не нужны. Например, когда я обновлял операционную систему Debian с Jessie на Stretch, то система управления источниками бесперебойного питания NUT стала требовать использования SSL-сертификатов, хотя этот сервис вовсе не публичный и доступен только на локальном петлевом интерфейсе. Многие системные администраторы совсем не против того, чтобы увеличить безопасность своих систем. Одна беда — сертификаты иногда стоят несоразмерно дорого для сервиса, которым пользуются несколько человек. До этого я пользовался бесплатными сертификатами, которые предоставлял удостоверяющий центр StartCom. Однако этот удостоверяющий центр сменил владельцев, которые теперь находятся в Китае.

  • [25.10.2016] Mozilla перестаёт доверять новым сертификатам WoSign и StartCom
  • [08.07.2017] Google предупредил о скором прекращении доверия ко всем сертификатам WoSign и StartCom

Не исключаю предвзятости по отношению к этому удостоверяющему центру. Вполне возможно, что он и раньше был не безопасен, но это замалчивали, т.к. владельцы были израильскими, а у США и Израиля довольно доверительные отношения. Теперь же, когда сервис сменил владельца, его безопасностью начали интересоваться особо внимательно. Так или иначе, даже если с сервисом всё в порядке — ему не доверяют компании, разрабатывающие два самых влиятельных браузера, поэтому пользоваться такими сертификатами особого смысла нет, т.к. по качеству они мало чем отличаются от самозаверенных.

В последнее время на слуху новый удостоверяющий центр Let’s Encrypt, который был создан как ответ на постоянные проблемы с безопасностью сервисов и высокую цену на сертификаты удостоверяющих центров. Первые новости о его публичной доступности появились ещё в конце 2015 года, до скандалов с StartCom:

Начал писать статью о настройке Jabber-сервера Prosody и в процессе написания раздела о настройке SSL решил попробовать новый удостоверяющий центр. Описал процесс получения сертификата, но потом решил, что описание этой процедуры имеет самостоятельную ценность и решил вынести в отдельную статью, которую вы сейчас и читаете.

1. Получение сертификатов

У сервиса Let’s Encrypt нет веб-интерфейса, как у других удостоверяющих центров. Для создания сертификата используется протокол ACME. Протокол этот реализован в боте CertBot, пакет с которым имеется в репозитории Debian Stretch. Установим бота:

# apt-get install certbot

После установки бота, запустим его от имени пользователя root:

# certbot certonly --manual Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):vladimir@stupin.su ------------------------------------------------------------------------------- Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree in order to register with the ACME server at https://acme-v01.api.letsencrypt.org/directory ------------------------------------------------------------------------------- (A)gree/(C)ancel: A

Здесь нас просят ознакомиться с лицензионным соглашением, которое размещается по ссылке https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf С вас как минимум требуется, чтобы вы получали сертификаты только для тех доменов, которыми владеете, а также требуется отзывать сертификаты, если у вас имеются подозрения о взломе ваших серверов или сертификатов. Нажимаем кнопку A, чтобы принять соглашение.

Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel):stupin.su Obtaining a new certificate Performing the following challenges: http-01 challenge for stupin.su ------------------------------------------------------------------------------- NOTE: The IP of this machine will be publicly logged as having requested this certificate. If you're running certbot in manual mode on a machine that is not your server, please ensure you're okay with that. Are you OK with your IP being logged? ------------------------------------------------------------------------------- (Y)es/(N)o: Y

Здесь вас предупреждают, что IP-адрес, с которого будет отправлен запрос на получение сертификата, будет сохранён в общедоступный журнал. Если вы запускаете бота не на своём сервере, то подтвердите, что получили на это разрешение владельца. Нажимаем кнопку Y, чтобы подтвердить отправку запроса на получение сертификата.

------------------------------------------------------------------------------- Make sure your web server displays the following content at http://stupin.su/.well-known/acme-challenge/VQaUp_Q225nyu_beedJzbDhRHmLt8y7W4dSBrZ4YIt4 before continuing: VQaUp_Q225nyu_beedJzbDhRHmLt8y7W4dSBrZ4YIt4.AxZB-wyvXtEUAxRRJN5bDGyEo5uDO7aVvEgrJ7PVgoo If you don't have HTTP server configured, you can run the following command on the target server (as root): mkdir -p /tmp/certbot/public_html/.well-known/acme-challenge cd /tmp/certbot/public_html printf "%s" VQaUp_Q225nyu_beedJzbDhRHmLt8y7W4dSBrZ4YIt4.AxZB-wyvXtEUAxRRJN5bDGyEo5uDO7aVvEgrJ7PVgoo > .well-known/acme-challenge/VQaUp_Q225nyu_beedJzbDhRHmLt8y7W4dSBrZ4YIt4 # run only once per server: $(command -v python2 || command -v python2.7 || command -v python2.6) -c \ "import BaseHTTPServer, SimpleHTTPServer; \ s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); \ s.serve_forever()" ------------------------------------------------------------------------------- Press Enter to Continue

Чтобы подтвердить владение доменом, нас просят разместить по адресу http://stupin.su/.well-known/acme-challenge/VQaUp_Q225nyu_beedJzbDhRHmLt8y7W4dSBrZ4YIt4 следующее содержимое:

VQaUp_Q225nyu_beedJzbDhRHmLt8y7W4dSBrZ4YIt4.AxZB-wyvXtEUAxRRJN5bDGyEo5uDO7aVvEgrJ7PVgoo

Перейдём в корневой каталог документов веб-сервера, создадим необходимые для подтверждения каталоги:

# cd /var/www/ # mkdir -p .well-known/acme-challenge # cd .well-known/acme-challenge/

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

Waiting for verification. Cleaning up challenges Generating key (2048 bits): /etc/letsencrypt/keys/0000_key-certbot.pem Creating CSR: /etc/letsencrypt/csr/0000_csr-certbot.pem IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/stupin.su/fullchain.pem. Your cert will expire on 2017-11-04. 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 lose your account credentials, you can recover through e-mails sent to vladimir@stupin.su. - 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

Готовый сертификат лежит в файле /etc/letsencrypt/live/stupin.su/fullchain.pem и годен до 4 ноября. Если учётная запись будет утрачена, её можно будет восстановить через указанный вами ящик электронной почты. Если понадобится обновить все сертификаты, сделать это можно при помощи одной команды:

# certbot renew

Удалим более не нужные файлы, которые использовались для подтверждения владения доменом:

# cd /var/www/ # rm -R .well-known

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

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

# chmod o= /etc/letsencrypt/archive/*/privkey*.pem

2. Обновление сертификатов

Для беспроблемного дальнейшего обновления сертификатов добавим в файл /etc/letsencrypt/cli.ini следующие настройки:

manual-auth-hook /etc/letsencrypt/authenticator.sh manual-cleanup-hook /etc/letsencrypt/cleanup.sh manual-public-ip-logging-ok yes

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

Первый скрипт /etc/letsencrypt/authenticator.sh содержит внутри себя следующие команды:

#!/bin/sh mkdir -p /var/www/.well-known/acme-challenge echo $CERTBOT_VALIDATION > /var/www/.well-known/acme-challenge/$CERTBOT_TOKEN

Второй скрипт /etc/letsencrypt/cleanup.sh содержит внутри себя следующие команды:

#!/bin/sh rm -f /var/www/.well-known/acme-challenge/$CERTBOT_TOKEN rmdir /var/www/.well-known/acme-challenge rmdir /var/www/.well-known

Теперь для обновления сертификатов можно будет воспользоваться одной командой:

Как установить бесплатный сертификат Let’s Encrypt и настроить автоматический перевыпуск

url image

Выпуск SSL-сертификата является одной из важных частей администрирования веб-сайта, он устанавливается с целью защиты от перехвата данных пользователей, например, логинов и паролей, email-адресов или банковских карт. На сегодняшний день даже на тех сайтах, где не вводятся важные данные, которые могли бы быть перехвачены, рекомендуется использовать хотя бы самый простой сертификат. Например, бесплатный SSL от Let’s Encrypt. После выпуска и установки SSL-сертификата сайт начнет работу по HTTPS-протоколу (т.е. защищенному HTTP), порт уже будет не 80, а 443 — это порт HTTPS, с которым свободно работает браузер без необходимости указывать его в адресной строке. В этой статье мы расскажем, как получить SSL-сертификат Let’s Encrypt и настроить его перевыпуск с помощью утилиты Certbot.

Устанавливаем Certbot с плагином для веб-сервера

Чтобы SSL-сертификат от Let’s Encrypt можно было выпустить и автоматически установить в конфигурацию веб-сервера, потребуется установить специальную утилиту — Certbot, а также один из её плагинов в зависимости от используемого веб-сервера.

Debian/Ubuntu

Перед установкой желательно выполнить команду apt update . Если используется Apache:

apt install certbot python3-certbot-apache

Если используется Nginx:

apt install certbot python3-certbot-nginx

CentOS 7

yum install epel-release

Если используется Apache:

yum install certbot certbot-apache

Если используется Nginx:

yum install certbot certbot-nginx

Certbot можем считать установленным, однако это ещё не всё. Так как мы планируем настроить автоматическое встраивание SSL-сертификата в конфигурацию Apache или Nginx, необходимо проверить конфигурационный файл (виртуальный хост) на наличие и корректность интересующих нас строк.

Настраиваем виртуальный хост Apache или Nginx

Когда Certbot будет выполнять автоматическую установку SSL-сертификата, его плагину потребуется найти в конфигурационных файлах Apache или Nginx конкретные строки, чтобы внести необходимые изменения. Поэтому предварительно нужно убедиться в их наличии и корректности. Так что на этом этапе мы вручную найдём и проверим директивы ServerName и ServerAlias (в случае Apache) или server_name (в случае Nginx) с указанием соответствующего домена, для которого будем выпускать и устанавливать SSL. Например, в случае Apache виртуальный хост может размещаться здесь: /etc/httpd/conf.d/default.conf (для CentOS) /etc/apache2/conf.d/default.conf (для Debian/Ubuntu, далее в примерах для Apache будет указан путь только в варианте для CentOS, но на Debian/Ubuntu процедура аналогична, нужно только заменить httpd на apache2 ) Более точно можно посмотреть с помощью команды:

apachectl -S 

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

/etc/nginx/sites-available/example.com.conf 

Проверим содержимое файла конфигурации, открыв его в nano или другом текстовом редакторе: В случае Apache:

vi /etc/httpd/conf.d/default.conf

В случае Nginx:

nano /etc/nginx/sites-available/example.com.conf

Проверяем, что в файле содержится строка ServerName и ServerAlias (в случае Apache) или server_name (в случае Nginx). Пример отрывка корректного содержимого виртуального хоста: в случае /etc/httpd/conf.d/default.conf

. ServerName example.com ServerAlias www.example.com . 

в случае /etc/nginx/sites-available/example.com

. server_name example.com www.example.com; . 

Если у вас всё аналогично, можно закрыть редактор (с сохранением изменений) и перейти к следующему этапу. Если есть отличия, проверьте, параметры виртуальных хостов и приведите вышеуказанные строки к аналогичному виду, в частности необходимо прописать в директиве server_name доменное имя и поддомен www. После чего сохраняем файл и закрываем редактор. Финальная проверка — проверяем синтаксис в файлах конфигурации: В случае Apache:

apachectl configtest

В случае Nginx:

nginx -t

Если выводится ошибка, внимательно изучите, на какой файл и строку «ругается» проверка, и поправьте эти строки в соответствии с корректным синтаксисом, пока не получите подтверждение о том, что проверка конфигурационного файла успешно пройдена. Чтобы применить изменения в файле конфигурации, необходимо перезапустить веб-сервер: В случае Apache:

systemctl restart httpd

Напомню, в Debian/Ubuntu httpd заменяем на apache2 , поэтому команда будет иметь вид: systemctl restart apache2 . В случае Nginx:

systemctl reload nginx

Теперь плагин Certbot при автоматической установке найдет нужные строки и проведет необходимые изменения для установки сертификата Let’sEncrypt.

Выпускаем SSL-сертификат Let’s Encrypt

Подготовка завершена, можем приступать непосредственно к выпуску и установке SSL-сертификата. Для последнего, как уже упоминалось выше, в Certbot имеются плагины, именно они изменят виртуальный хост веб-сервера и перезапустят службу, когда будет выпущен сертификат. Без плагина настроить перевыпуск не получится, выполнится только выпуск. Чтобы запустить выпуск SSL с использованием плагина, воспользуемся следующей командой: В случае Apache:

certbot --apache -d testpanel.fvds.ru -d www.testpanel.fvds.ru

В случае Nginx:

certbot --nginx -d example.com -d www.example.com

Произойдет запуск Certbot с плагином —apache или —nginx , опция -d необходима чтобы обозначить доменные имена, для которых мы хотим получить сертификат Let’s Encrypt. Если утилита запускается впервые, появится сообщение с просьбой указать адрес эл. почты и принять условия обслуживания. Адрес почты лучше указать действующий, так как Let’s Encrypt будет отправлять туда письма о проблемах и другие уведомления. После этого Certbot связывается с сертификационным центром Let’s Encrypt, который, в свою очередь, отправляет запрос к вашему сайту по специально сгенерированному URL, чтобы подтвердить, что домен, для которого вы выпускаете сертификат, принадлежит действительно вам. После успешного подтверждения утилита предложит выбрать дополнительную опцию для установки:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Выбирая первый вариант, мы просим не добавлять редирект с http:// на https:// для вашего сайта. Он подходит для случаев, когда редирект не требуется либо когда вы планируете добавить его самостоятельно. Во втором варианте, помимо внесения в виртуальный хост строк о SSL-сертификате, утилита добавит строки, необходимые для работы редиректа с http:// на https://. Когда выберете предпочитаемый вариант, нажмите Enter. Виртуальный хост будет обновлён, а веб-сервер перезапустится для применения новых параметров. На этом Certbot завершает работу и выводит текст, в котором сообщает об успешном выпуске и указывает полный путь до файлов сертификата Let’s Encrypt:

IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2020-08-18. 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" - 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

Вот и всё, теперь сертификат Let’s Encrypt установлен! Проверьте ваш веб-сайт в браузере, добавив в адресной строке https:// (если выбирали опцию без редиректа), на наличие замка в адресной строке браузера. Наличие этого индикатора означает, что ваш сайт защищён. Наверняка вы знаете, что сертификаты не бесконечны и выпускаются лишь на определенный срок. В случае Let’s Encrypt — это 90 дней. Чтобы не выполнять процедуру перевыпуска каждые 90 дней вручную, перейдем к этапу автоматического обновления сертификата.

Настраиваем автоматический перевыпуск сертификата

Если у вас Debian/Ubuntu, то Certbot в состоянии выполнять автоматический перевыпуск, добавляя в systemd специальный таймер, который по умолчанию настроен на запуск два раза в день, чтобы утилита могла проверять все сертификаты и автоматически перевыпускать те из них, которые истекают менее чем через 30 дней. Проверим статус таймера с помощью команды systemctl :

systemctl status certbot.timer ● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left Triggers: ● certbot.service 

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

certbot renew --dry-run

В случае CentOS нам нужно самостоятельно внести задание в планировщик cron командой:

crontab -e

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

30 4 * * * /usr/bin/certbot renew --quiet

В задании указано, что запуск проверки необходимости перевыпуска сертификата будет происходить ежедневно в 4:30 ночи по серверному времени. Вы можете корректировать это задание на периодичность и время запуска по своему усмотрению. Если при перевыпуске «вхолостую» ошибок нет, то и при перевыпуске по заданию (в таймере или планировщике) Certbot продлит SSL-сертификаты, когда они будут истекать, а также внесёт изменения в виртуальных хост веб-сервера и перезапустит его для применения изменений. Если процесс автоматического перевыпуска завершится с ошибкой, то Let’s Encrypt отправит сообщение на указанный ранее адрес электронной почты (который вы указали при первом запуске утилиты) с предупреждением о том, что выпуск сертификата не был осуществлён, а текущий сертификат истекает.

Выпуск Wildcard сертификата

Сейчас рассмотрим выпуск Wildcard сертификата, данный тип сертификатов позволяет защищать не только домен второго уровня, но и все поддомены, связанные с ним. К примеру, если на сервере установлено несколько сайтов и все необходимо подключить к SSL, то необязательно выпускать на каждый домен по одному сертификату: lamp.fvds.ru, www.lamp.fvds.ru, shop.lamp.fvds.ru, forum.lamp.fvds.ru — можно обойтись только одним Wildcard. Стоит обратить внимание на то, что данный тип сертификата Wildcard требует обязательную проверку по DNS записи TXT. При запуске процедуры выпуска сертификата Certbot запросит два раза добавить TXT-запись с разными значениями. К сожалению, в данном случае указанный ранее способ автопродления сертификата не будет работать из-за проверки по DNS, потребуется ручной выпуск. Пожалуйста, учитывайте этот момент. Запускаем команду:

certbot --manual --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns certonly --server https://acme-v02.api.letsencrypt.org/directory -d *.lamp.fvds.ru -d lamp.fvds.ru

Замените значения на свои: *.lamp.fvds.ru и lamp.fvds.ru Пример: *.domain.ru и domain.ru. После запуска команды вывод будет следующим:

Please deploy a DNS TXT record under the name _acme-challenge.lamp.fvds.ru with the following value: RYHdWpSmMuVjdJFZT9JGBs7zuQOFgN78f1Azt1fwNcc Before continuing, verify the record is deployed.

Это означает, что сейчас требуется создать TXT ресурсную запись для доменного имени в DNS. Имя: _acme-challenge.lamp.fvds.ru Значение: RYHdWpSmMuVjdJFZT9JGBs7zuQOFgN78f1Azt1fwNcc Если домен делегирован на сервера имён FirstVDS, можете перейти в DNSmanager и создать ресурсную запись, ориентируясь по прикреплённым скриншотам: После сохранения записи результат должен быть таким: Как только создадим запись, возвращаемся в терминал и нажимаем «Enter» для того, чтобы продолжить выпуск. Обязательно обратите внимание на то, что Certbot запросит создание второй TXT записи — нужно создать её аналогичным образом и завершить выпуск. Сертификат также сохранится в указанной директории: /etc/letsencrypt/live По завершении выпуска сертификата рекомендуем изучить наши статьи по его установке на домен и для почты. Отметим, что при использовании автовыпуска сертификатов (не Wildcard) с плагинами для Apache или Nginx, установка сертификата на домен происходит автоматически. Если ваш сервер работает с панелью управления ispmanager, можете выпустить такой же сертификат по инструкции.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *