LetsEncrypt SSL: различия между версиями
Sol (обсуждение | вклад) |
Sol (обсуждение | вклад) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 87: | Строка 87: | ||
nginx -s reload | nginx -s reload | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | letsencrypt --agree-tos --renew-by-default --standalone --http-01-port 9999 --server https://acme-v02.api.letsencrypt.org/directory certonly -d wiki.webko.net.ua --register-unsafely-without-email | ||
+ | </syntaxhighlight> | ||
+ | |||
Подготовка завершена, переходим непосредственно к запросу сертификата. В зависимости от вашего дистрибютива приложение может иметь разные названия (letsencrypt или certbot). | Подготовка завершена, переходим непосредственно к запросу сертификата. В зависимости от вашего дистрибютива приложение может иметь разные названия (letsencrypt или certbot). | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Строка 186: | Строка 191: | ||
* 300 ожидающих авторизации запросов на аккаунт. | * 300 ожидающих авторизации запросов на аккаунт. | ||
+ | Здесь [https://crt.sh/ crt.sh] можно просмотреть количество сертификатов выпущеных для домена. | ||
[[Категория:Web]] | [[Категория:Web]] |
Текущая версия на 13:08, 17 октября 2022
Let’s Encrypt is a free, automated, and open certificate authority (CA), run for the public’s benefit.
We give people the digital certificates they need in order to enable HTTPS (SSL/TLS) for websites, for free, in the most user-friendly way we can. We do this because we want to create a more secure and privacy-respecting Web.
The key principles behind Let’s Encrypt are:
- Free: Anyone who owns a domain name can use Let’s Encrypt to obtain a trusted certificate at zero cost.
- Automatic: Software running on a web server can interact with Let’s Encrypt to painlessly obtain a certificate, securely configure it for use, and automatically take care of renewal.
- Secure: Let’s Encrypt will serve as a platform for advancing TLS security best practices, both on the CA side and by helping site operators properly secure their servers.
- Transparent: All certificates issued or revoked will be publicly recorded and available for anyone to inspect.
- Open: The automatic issuance and renewal protocol will be published as an open standard that others can adopt.
- Cooperative: Much like the underlying Internet protocols themselves, Let’s Encrypt is a joint effort to benefit the community, beyond the control of any one organization.
Установка приложения
Centos
yum install epel-release -y
yum install certbot
Arch Linux
pacman -Syu certbot
Debian/Ubuntu
sudo apt-get update
sudo apt-get install letsencrypt
Получение сертификата
В силу того что в своей работе я отдаю предпочтение веб серверу Nginx все примеры будат заточены под него.
Для примера возьмем домен wiki.webko.net.ua, у него есть конфиг вида
server {
listen 212.26.146.24:80;
server_name wiki.webko.net.ua;
root /srv/http/wiki;
index index.php;
access_log /var/log/nginx/domains/wiki.webko.net.ua.log combined;
error_log /var/log/nginx/domains/wiki.webko.net.ua.error.log error;
client_max_body_size 5m;
client_body_timeout 60;
location / {
...
}
}
Для того чтобы полчуть сертификат для домена первым делом нужно удостовить LE в том что вы имеете право на запрос сертификата для домена. Я использую acme-challenge. Для упрощения админисрирования, возможно, большего хазяйства я использую шаблон для проведения удостоверения, его основная функция - переадресация всех запросов к урлу .well-known/acme-challenge/ приложению проводящему удостоверение (тоесть letsencrypt или certbot), его мы сможем подключать к любому виртуальному хосту, выглядит он так.
mkdir /etc/nginx/template
vim /etc/nginx/template/letsencrypt.conf
location ~ ^/(.well-known/acme-challenge/.*)$ {
proxy_pass http://127.0.0.1:9999/$1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Дальше подключаем его к виртуальному хосту нашего домена.
server {
listen 212.26.146.24:80;
server_name wiki.webko.net.ua;
root /srv/http/wiki;
index index.php;
access_log /var/log/nginx/domains/wiki.webko.net.ua.log combined;
error_log /var/log/nginx/domains/wiki.webko.net.ua.error.log error;
client_max_body_size 5m;
client_body_timeout 60;
include template/letsencrypt.conf; # <---
location / {
...
}
}
Перезагружаем конфиг Nginx для применения изменений.
nginx -t
nginx -s reload
letsencrypt --agree-tos --renew-by-default --standalone --http-01-port 9999 --server https://acme-v02.api.letsencrypt.org/directory certonly -d wiki.webko.net.ua --register-unsafely-without-email
Подготовка завершена, переходим непосредственно к запросу сертификата. В зависимости от вашего дистрибютива приложение может иметь разные названия (letsencrypt или certbot).
letsencrypt --agree-tos --renew-by-default --standalone --standalone-supported-challenges \
http-01 --http-01-port 9999 --server https://acme-v01.api.letsencrypt.org/directory \ #запуск внутреннего http сервера для проведения аутентификации
certonly \ #получаем сертификаты без автоматической правки конфигов вебсервера(возможно при помощи отдельных плагинов для LE)
-d wiki.webko.net.ua -d www.wiki.webko.net.ua \ #перечислены домены для которых запрашивается сертификат
--rsa-key-size 4096
Дальше начнется удостоверенеие, в ходе так же у вас будет запршен "контактный" емейл, для отправки вам уведомлений об окончании срока действия сертификата.
Если все прошло успешно вы увидите уведомление об успешном создании сертификатов и пути их расположения.
/etc/letsencrypt/renewal/wiki.webko.net.ua.conf - конфиг
/etc/letsencrypt/archive/wiki.webko.net.ua/ - архив сертификатов
/etc/letsencrypt/live/wiki.webko.net.ua/ - актуальные сертификаты
Следубщим шагом создадим виртуальный конфиг для нашего домена с поддержкой SSL.
# постоянный редирект на https
server {
listen 212.26.146.24:80;
server_name wiki.webko.net.ua;
return 301 https://$server_name$request_uri;
}
# конфиг виртуального хоста
server {
listen 212.26.146.24:443 ssl;
server_name wiki.webko.net.ua;
root /srv/http/wiki;
index index.php;
access_log /var/log/nginx/domains/wiki.webko.net.ua.log combined;
error_log /var/log/nginx/domains/wiki.webko.net.ua.error.log error;
# включение ssl и подключение сертификатов
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/letsencrypt/live/wiki.webko.net.ua/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/wiki.webko.net.ua/privkey.pem;
client_max_body_size 5m;
client_body_timeout 60;
include template/letsencrypt.conf;
location / {
...
}
}
Перезагружаем конфиг Nginx для применения изменений.
nginx -t
nginx -s reload
Теперь наш сайт доступен по https соединению, при переходе по http будет срабатывать редирект на https.
Получение сертификата не для WEB
В случае когда нам нужен сертификат для почтового сервера (на пример) у которого по у молчанию нет служб сшающих http соединения (для прохождения удостоверения) мы можем использовать дефолтный конфиг Nginx для своих нужд.
yum install nginx | pacman -Syu nginx | apt install nginx
vim /etc/nginx/conf.d/default.conf
server {
listen 80 default_server;
server_name _;
include template/letsencrypt.conf # наш шаблон
}
nginx -t
systemctl start nginx
systemctl enable nginx
Дальше генерируем наш сертификат как описано выше, главное условие, у вас должна быть коректно настроена А запись для интересующего домена (субдомена).
По завершению сертификат можно использовать например для exim, postfix, dovecot.
Обновление сертифкатов
Для обновления сертификатов срок годности которых подходит или подошел к концу можно воспользоватся командой
letsencrypt renew
Она обновит все нуждающееся в обновлении сертификаты, после чего нужно перезагрузить всех демонов использующих обновленные сертификаты для применения изменений.
Для автоматического обновления можно использовать крон.
echo "0 0 * * 7 /usr/bin/letsencrypt > /dev/null && systemctl restart nginx" >> /var/spool/cron/root
Такое задание будет пытатся обновить сертификаты каждое воскресенье в 0 часов 0 минут.
Ограничения
У Let’s Encrypt действуют такие ограничения:
- 20 сертификатов на 1н домен в неделю;
- 100 сабдоменов на 1н сертификат;
- 5 повторяющихся запросов для домена/сабдомена в неделю;
- 5 неудачных попыток верификации на аккаунт, доменное имя в час;
- 500 аккаунтов на IP за 3 часа;
- 300 ожидающих авторизации запросов на аккаунт.
Здесь crt.sh можно просмотреть количество сертификатов выпущеных для домена.