Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
let_s_encrypt [2025/07/06 12:39] (текущий) – внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== Настройка Linux для использования центра SSL сертификации Lets Encrypt ======
 +~~Title: Где получить SSL сертификат бесплатно? Использование центра сертификации Let’s Encrypt ~~
 +{{htmlmetatags>
 +metatag-description=Список бесплатных центров SSL сертификатов. Установка и использование Let’s Encrypt. Настройка certbot и acme.sh (альтернатива certbot).
 +}}
 +
 +{{ ::letsencrypt_01.jpg?nolink&400 |}}
 +
 +Домашняя страница: [[https://letsencrypt.org/ru/getting-started/|Let’s Encrypt is a free, automated, and open Certificate Authority]]
 +
 +Чтобы получить SSL сертификат для вашего домена от Let’s Encrypt, вам необходимо запустить клиентскую часть на вашем сервере.
 +
 +Пригодны ли сертификаты Let’s Encrypt для других целей, нежели SSL/TLS для сайтов? Сертификаты Let’s Encrypt - обычные сертификаты с подтверждением домена, поэтому они пригодны для любых серверов с доменным именем - web-серверы, почтовые серверы, FTP-серверы и т.д. Но для шифрования электронной почты и подписи исполняемого кода нужны сертификаты иного типа, который Let’s Encrypt пока не предоставляет.
 +
 +**Ограничения Let’s Encrypt**:
 +  - Основной лимит — количество регистраций сертификатов на один зарегистрированный домен не более 50 в неделю. Под зарегистрированный доменном подразумевается часть домена, который вы приобрели у своего [[https://dieg.info/review-category/domain-registrars/|регистратора доменных имен]]. Например, для имени www.example.com зарегистрированным доменом является example.com. В new.blog.example.co.uk зарегистрированный домен — example.co.uk.
 +  - Максимум 300 новых попыток регистрации на аккаунт за 3 часа. Новый регистрация создается каждый раз, когда вы запрашиваете сертификат у Boulder CA, то есть считаются и неудачные попытки.
 +  - Продления обрабатываются особым образом: они не засчитываются в ваш лимит сертификатов на зарегистрированный домен, но на них распространяется лимит дубликатов сертификатов, равный 5 в неделю.
 +  - Максимум 10 учетных записей на один IP-адрес за 3 часа. Вы можете создать не более 500 учетных записей на диапазон IP-адресов в пределах IPv6/48 за 3 часа.
 +  - Можно объединить несколько имен хостов в один SSL сертификат, до 100 имен на сертификат. По соображениям производительности и надежности лучше использовать меньше имен на сертификат, когда это возможно. Сертификат содержащий несколько доменных имен часто называют сертификатом SAN (Subject Alternate Name), сертификатом единой связи (UCC), биржевым сертификатом или multi-domain certificate (НЕ ПУТАТЬ с Wildcard SSL).
 +
 +<panel type="info">Многодоменный (multi domain) SSL-сертификат — это единый сертификат, который можно использовать для защиты нескольких доменов (или субдоменов, если вы указываете их как SAN). С другой стороны, wildcard SSL-сертификат защищает только ваш основной домен и неограниченное количество поддоменов на одном уровне.</panel>
 +
 +
 +Let’s Encrypt предлагает сертификаты с подтверждением домена (Domain Validation, DV), [[let_s_encrypt#shag_5poluchenie_sertifikata_wildcard_ssl|Wildcard SSL]]. Они не выпускают сертификаты с подтверждением организации (Organization Validation, OV) или сертификаты высокой надёжности (Extended Validation, EV), потому что не могут пока автоматизировать выдачу таких сертификатов.
 +
 +<panel type="success" title="Обратите внимание!">У всех [[https://dieg.info/proverennye-hostingi-dlya-sayta/|ведущих хостинг провайдеров]] на виртуальных тарифах настроен автоматический выпуск бесплатных SSL сертификатов Let’s Encrypt.
 +
 +Читайте руководство далее, если настраивайте сервер VPS/VDS, используя, например мою статью [[cheklist_nastrojka_vps_vds_vydelennogo_servera_linux]].</panel>
 +
 +===== Альтернатива Let’s Encrypt или Где получить SSL сертификат бесплатно =====
 +
 +  - Бесплатные сертификаты от [[https://dieg.info/review/obzor-regery/|компании Regery (Реджери)]] на 90 дней: [[https://to.dieg.info/regerysslru|Sectigo Free SSL и Regery Free SSL с бесплатной помощью]] по их выпуску. Широкий выбор брендов платных SSL сертификатов: Symantec, Thawte, Sectigo, GeoTrust, RapidSSL.
 +  - Бесплатные сертификаты по протоколу ACME выдает норвежский Buypass (услуга BuyPass Go SSL).
 +  - Бесплатные сертификаты [[out>https://www.ssl.com/certificates/free/|SSL.com]] на 90 дней
 +  - **ZeroSSL** предоставляет бесплатный тариф — DV сертификат на 90 дней. Как и Free SSL, заявляют о 99,99% совместимости с серверами, браузерами и устройствами, однако на бесплатном тарифе не поддерживается wildcard.
 +  - **Free SSL Space** -  некоммерческая организация, которая также выдает 90-дневные DV сертификаты. Отличается от Let’s Encrypt совместимостью: как заявляет компания, их сертификаты поддерживаются на 99,99% устройств. Нет опции wildcard. **Сервис умер, как я понимаю**, если ошибаюсь напишите мне!
 +  - [[cloudflare|CloudFlare]] защищает сайты от DDoS-атак — моментов, когда злоумышленники пытаются перегрузить ваш сайт множеством одновременных запросов, а также ускоряет загрузку. Бесплатный SSL сертификат — приятное дополнение к сервису. CloudFlare предлагает получить SSL сертификат бесплатно и на неопределенный срок на базовом тарифе, который предназначен для личных некоммерческих сайтов. У бесплатного SSL от CloudFlare есть одно «но». Загрузка сайта ускоряется благодаря тому, что сервис кеширует ваш сайт на свои серверы и контент попадает пользователю с них. Общение происходит по цепочке «пользователь — серверы CloudFlare — ваш сервер», и SSL зашифрует только первую связь. На ваш сервер данные будут идти уже открыто. Впрочем, это уже решает самые распространенные проблемы безопасности вроде использования общественного Wi-Fi.
 +  - У хостинг-провайдера или [[https://dieg.info/review-category/domain-registrars/|регистратора доменных имен]] вы можете получить бесплатный SSL сертификат. Если вы только собираетесь заводить сайт или [[https://dieg.info/proverennye-hostingi-dlya-sayta/|ищете новый хостинг]] — рассмотрите предложения, где бонусом идет сертификат.
 +===== Шаг 1: Инсталляция Certbot в Ubuntu с поддержкой Apache =====
 +Certbot - это ACME (Automated Certificate Management Environment) - клиент для автоматического создания и установки сертификатов, без остановки web- сервера. Существуют множество других клиентов, кроме certbot , которые поддерживает ACMEv2, например [[let_s_encrypt#acmesh_alternativa_certbot|acme.sh]].
 +
 +<jumbotron color="black">
 +**Инсталляция Certbot**
 + 
 +Используйте генератор инструкций, чтобы найти пользовательские команды для установки Certbot в среде вашего сервера. Достаточно просто выбрать программное обеспечение (веб-сервер) и операционную систему вашего сервера.
 +<btn type="primary">[[https://certbot.eff.org|Посмотреть варианты установки certbot для любой ОС и веб-сервера!]]</btn>
 +</jumbotron>
 +
 +Настроим поддержку SSL в Apache с настройками HTTPS по умолчанию, для этого нужно включить модуль ssl:
 +<file php>
 +sudo a2enmod ssl
 +sudo a2ensite default-ssl
 +sudo systemctl restart apache2
 +</file>
 +Проверить текущие настройки виртуальных хостов командой apachectl с ключом S. Вы должны увидеть как минимум 2 виртуальных хоста по умолчанию.
 +<file php>
 +# apachectl -S
 +</file>
 +
 +Ставим пакеты Certbot с поддержкой Nginx
 +<file php>
 +apt install certbot python3-certbot-nginx
 +</file>
 +Теперь Certbot установлен на сервере.
 +
 +Чтобы автоматически получить и настроить SSL для вашего веб-сервера, Certbot должен найти корректный виртуальный хост в ваших файлах конфигурации Apache, Nginx. Имена доменов ваших серверов будут получены из директив ServerName и ServerAlias, определенных в блоке конфигурации VirtualHost.
 +
 +==== Полезные ключи Certbot ====
 +  * Вывести информацию об установленных SSL ключах
 +<file bash>
 +certbot certificates
 +</file>
 +===== Шаг 2:  Как создать виртуальный домен Apache с поддержкой HTTP и HTTPS =====
 +Как не странно процедура создания виртуального домена веб сервера Apache всегда вызывает вопросы. Но с другой стороны эта тривиальная задача в интернете описана с гигантским количество ошибок. 
 +
 +Ниже я описываю, как создать виртуальный домен Apache с поддержкой HTTP и HTTPS и установить права на директории.
 +<file php>
 +sudo mkdir /var/www/your_domain
 +sudo chown -R $USER:$USER /var/www/your_domain
 +</file> Надеюсь вы не трогали значение [[umask]], тогда выполните команду
 +<file php>
 +sudo chmod -R 755 /var/www/your_domain
 +</file>
 +Создайте пустой index.html любым известным вам способом, например используя [[nano]].
 +<file php>
 +sudo nano /var/www/your_domain/index.html
 +</file>
 +Теперь необходимо создать конфигурационный файл виртуального хоста с правильными директивами, не надо менять файл /etc/apache2/sites-available/000-default.conf, нужно создать новый. В в одном и том же файле описываем виртуальных хост для HTTP (порт 80) и HTTPS (порт 443), пути к SSL сертификатам копируем из файла default-ssl.conf. SSL сертификаты нужно указать, в дальнейшем они будут автоматически заменены программой  certbot.
 +<file php>
 +sudo nano /etc/apache2/sites-available/your_domain.conf
 +</file>с таким содержимым
 +<file php>
 +<VirtualHost *:80>
 +    ServerAdmin webmaster@localhost
 +    ServerName your_domain
 +    ServerAlias www.your_domain
 +    DocumentRoot /var/www/your_domain
 +    ErrorLog ${APACHE_LOG_DIR}/error.log
 +    CustomLog ${APACHE_LOG_DIR}/access.log combined
 +</VirtualHost>
 +<VirtualHost *:443>
 +    SSLEngine on
 +    SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
 +    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
 +    ServerAdmin   webmaster@localhost
 +    DocumentRoot /var/www/your_domain
 +    ServerName your_domain
 +    ErrorLog ${APACHE_LOG_DIR}/error.log
 +    CustomLog ${APACHE_LOG_DIR}/access.log combined
 +</VirtualHost>
 +
 +</file>
 +
 +Включим созданные виртуальный хост
 +<file php>
 +sudo a2ensite
 +</file> В выводе это команды вы увидите список всех ваших виртуальных хостов, выделите нужный мышкой и через пробел введите все нужные или сразу укажите нужный хост, набрав команду
 +<file php>
 +sudo a2ensite your_domain.conf
 +</file>
 +Если нужно, можно отключить хост по умолчанию, но я так не делаю. Для отключения введите команду:
 +<file php>
 +sudo a2dissite 000-default.conf
 +</file>
 +Обязательно перегружаем Apache, чтобы он подхватил наши изменения
 +<file php>
 +sudo systemctl reload apache2
 +</file>
 +
 +===== Шаг 3: Получение сертификата SSL =====
 +Введите следующую команду:
 +<file php>
 +sudo certbot --apache
 +</file>
 +Скрипт certbot предложит вам ответить на ряд вопросов, чтобы настроить сертификат SSL: 
 +  - Введите действующий адрес электронной почты, которая будет использоваться для уведомлений о продлении и безопасности: жмем Enter.
 +  - Подтвердите согласие с условиями обслуживания Let’s Encrypt: ведите А.
 +  - Запрос на рассылку писем - нажмите Y (пусть спама в вашей жизни будет больше8-)), можете отказать и выбрать N
 +  - Наконец, на этом этапе вас спросят для каких доменов вы хотите получить SSL сертификат. Если хотите активировать HTTPS для всех указанных доменных имен (рекомендуется), то можно оставить командную строку пустой и нажать ENTER, чтобы продолжить. В противном случае выберите домены, для которых вы хотите активировать HTTPS, указав все подходящие номера через запятую и/или пробелы, и нажмите ENTER.
 +  - Далее вам будет предложено выбрать, перенаправлять трафик HTTP на HTTPS или нет. На практике это означает, что те, кто посещает ваш веб-сайт через незашифрованные каналы (HTTP), будут автоматически перенаправляться на адрес HTTPS вашего веб-сайта. Выберите 2, чтобы активировать перенаправление, или 1, если хотите сохранить и HTTP, и HTTPS в качестве отдельных методов доступа к вашему веб-сайту.
 +
 +**Поздравляю ваш сайт защищен!**
 +===== Шаг 4: Автоматический перевыпуск сертификата SSL =====
 +Сертификаты Let’s Encrypt действительны только в течение 90 дней. Установленный нами пакет certbot выполняет это автоматически, добавляя таймер systemd, который будет запускаться два раза в день и автоматически продлевать все сертификаты, истекающие менее, чем через 30 дней.
 +
 +Вы можете запросить статус таймера с помощью команды systemctl:
 +
 +<file>
 +systemctl status certbot.timer
 +
 +Output
 +● 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
 +</file>
 +Чтобы протестировать процесс обновления, можно сделать запуск «вхолостую» с помощью certbot:
 +
 +<file>
 +certbot renew --dry-run
 +</file>
 +Если ошибок нет, все нормально. Certbot будет продлевать ваши сертификаты, когда это потребуется, и перезагружать Nginx для активации изменений. Если процесс автоматического обновления когда-нибудь не выполнится, то Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты с предупреждением о том, что срок действия сертификата подходит к концу.
 +
 +Логи перевыпуска SSL сертификатов Let’s Encrypt обычно находятся в этой папке /var/log/letsencrypt/.
 +
 +Для версий скаченных с GitHub, понадобится другая настройка автоматического обновления.
 +
 +Не забудьте настроить [[cron|cron]]: в первом letsencrypt будет запускаться каждый понедельник 5 часов утра только для обновления устаревших SSL сертификатов. Во втором варианте также указывается [[nginx|nginx]] перечитать конфигурацию, потому что Nginx автоматически не увидит изменения файлов сертификатов.
 +<file bash>
 +sudo crontab -e
 +0 5 * * 1 /usr/bin/letsencrypt renew
 +
 +15 1 * * * /usr/bin/certbot renew --post-hook "systemctl reload nginx"
 +</file>
 +
 +===== Шаг 5: Получение сертификата Wildcard SSL =====
 +Let’s Encrypt начал выдавать Wildcard сертификаты c 14 марта 2018 года.
 +
 +Wildcard SSL/TLS позволяет использовать неограниченное количество поддоменов одного и того же домена (не путать с SAN). Любой полный домен, соответствующий * .yourdomain.com (где * может быть любым словом, а yourdomain.com - ваш домен), будет защищен цифровым сертификатом SSL с подстановочными знаками. Например, dieg.info, www.dieg.info, mail.dieg.info и любая другая комбинация dieg.info будет защищена сертификатом с подстановочными знаками, выданным * .dieg.info.
 +
 +<callout type="warning" title="TXT запись в DNS нужно менять каждые 90 дней" icon="glyphicon glyphicon-alert">Получение wildcard сертификата сейчас возможно только через DNS challenge ([[https://letsencrypt.org/ru/docs/challenge-types/|проверка DNS-01]]), где необходимо создать TXT запись вида _acme-challenge.example.com с определенным значением.</callout>
 +  - Прежде чем получить Wildcard SSL сертификат, нужно убедиться, что наш сервер отвечает на запросы на нескольких поддоменах. Обычно это достигается путем настройки записи [[DNS|DNS]] с подстановочными знаками, которая выглядит примерно так: <file>
 +*.example.com. 3600 IN  A 185.253.219.218
 +</file> Подстановочный знак * рассматривается как замена для любого имени хоста. Этот пример записи DNS будет соответствовать one.example.com и two.example.com. Он не будет соответствовать простому example.com и не будет соответствовать one.two.example.com, потому что подстановочный знак * будет расширяться только до одного имени хоста, а не до нескольких уровней имен.
 +
 +Запускаем команду для создания нового SSL сертификата:
 +<file bash>
 +certbot certonly \
 +  --agree-tos \
 +  --email info@hoster.tips \
 +  --manual \
 +  --preferred-challenges=dns \
 +  -d example.com \
 +  -d *.example.com \
 +  --server https://acme-v02.api.letsencrypt.org/directory
 +</file>
 +После выполнения команды вы получите запись TXT, которую необходимо добавить на свой DNS-сервер. Записи будут выглядеть следующим образом:
 +<file bash>
 +Please deploy a DNS TXT record under the name 
 +_acme-challenge.example.com with the following value: 
 +
 +HejzlvXokaKoAq_xnr5LTplWbKYNScVH-ASy1vMYMGE
 +Before continuing, verify the record is deployed. 
 +</file>
 +Убедившись, что запись добавлена, нажмите Enter, чтобы получить SSL. Для [[Nginx|Nginx]] конфиг будет примерно таким, обратите внимание на редирект с 80 порта
 +<file bash>
 +server { 
 + listen 80; 
 + listen [::]:80; 
 + server_name *.example.com; 
 + return 301 https://$host$request_uri; 
 +
 +
 +server { 
 + listen 443 ssl; 
 + server_name *.example.com; 
 + ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; 
 + ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; 
 + include /etc/letsencrypt/options-ssl-nginx.conf; 
 + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 
 + root /var/www/example.com; 
 + index index.html; 
 + location / { 
 +   try_files $uri $uri/ =404; 
 + 
 +}
 +</file>
 +Не забываем что команду создание сертификата нужен будет обновить через 3 месяца (срок жизни SSL), так же нужно будет обновлять DNS запись.
 +====== ACME.sh альтернатива скрипту certbot ======
 +
 +<note>На использование acme.sh меня сподвигнул сисадмин Сергей Деревянко. Респект и мое уважение.</note>
 +
 +Скрипт [[https://github.com/Neilpang/acme.sh|acme.sh]] написан на чистом [[bash|bash]], а оригинальный certbot на [[python]].
 +
 +Преимущества acme.sh: 
 +  * acme.sh автоматически поддерживает валидацию через DNS, поддерживает много API различных провайдеров, включая Yandex pdd.yandex.ru. Скрипт сам проверяет ваши права на домен добавляя специальную TXT запись в вашу зону (если есть API у вашего провайдера) и генерирует нужные сертификаты.
 +  * Поддержка [[docker|docker-а]] «из коробки», есть уже готовый контейнер от авторов скрипта.
 +  * Добавляет себя в cron для автоматического обновления сертификатов по таймеру.
 +  * acme.sh скрипт может выполнить заданную команду после обновления сертификатов — очевидным применением является отправка команды веб-серверу на перезагрузку ключей. Есть ещё хуки для выполнения до и после запуска скрипта.
 +  * Есть функции для автоматической загрузки ключей в различные хостинговые панели (типа [[hosting_control_panel_cpanel|cPanel]])
 +Установка acme.sh
 +<file bash>
 +curl https://get.acme.sh | sh
 +</file>
 +В [[cron|cron]] на каждой ноде создаем правило:
 +<file bash>
 +55 0 * * 6 "/root/.acme.sh"/acme.sh --cron --force --home "/root/.acme.sh" > /dev/null
 +</file>
 +[[out>https://tyapk.ru/blog/post/lets-encrypt-wildcard-ssl|ACME.sh: Lets Encrypt Wildcard SSL вручную]]
  

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!