LetsEncrypt SSL: различия между версиями

Материал из Webko Wiki
Перейти к навигации Перейти к поиску
(Новая страница: «Файл:Letsencrypt-logo-horizontal.svg Let’s Encrypt is a free, automated, and open certificate authority (CA), run for the public’s benefit. We give…»)
 
Строка 144: Строка 144:
 
Теперь наш сайт доступен по https соединению, при переходе по http будет срабатывать редирект на https.
 
Теперь наш сайт доступен по https соединению, при переходе по http будет срабатывать редирект на https.
 
=== Получение сертификата не для WEB ===
 
=== Получение сертификата не для WEB ===
 +
В случае когда нам нужен сертификат для почтового сервера (на пример) у которого по у молчанию нет служб сшающих http соединения (для прохождения удостоверения) мы можем использовать дефолтный конфиг Nginx для своих нужд.
 +
<syntaxhighlight lang="bash">
 +
yum install nginx | pacman -Syu nginx | apt install nginx
 +
vim /etc/nginx/conf.d/default.conf
 +
</syntaxhighlight>
 +
<syntaxhighlight lang="nginx">
 +
server {
 +
        listen      80 default_server;
 +
        server_name _;
 +
        include template/letsencrypt.conf  # наш шаблон
 +
}
 +
</syntaxhighlight>
 +
<syntaxhighlight lang="bash">
 +
nginx -t
 +
systemctl start nginx
 +
systemctl enable nginx
 +
</syntaxhighlight>
  
 +
Дальше генерируем наш сертификат как описано выше, главное условие, у вас должна быть коректно настроена А запись для интересующего домена (субдомена).
  
 +
По завершению сертификат можно использовать например для exim, postfix, dovecot.
 
== Обновление сертифкатов ==
 
== Обновление сертифкатов ==
 +
Для обновления сертификатов срок годности которых подходит или подошел к концу можно воспользоватся командой
 +
<syntaxhighlight lang="bash">
 +
letsencrypt renew
 +
</syntaxhighlight>
 +
Она обновит все нуждающееся в обновлении сертификаты, после чего нужно перезагрузить всех демонов использующих обновленные сертификаты для применения изменений.
  
 +
Для автоматического обновления можно использовать крон.
 +
<syntaxhighlight lang="bash">
 +
echo "0 0 * * 7 /usr/bin/letsencrypt > /dev/null && systemctl restart nginx" >> /var/spool/cron/root
 +
</syntaxhighlight>
 +
Такое задание будет пытатся обновить сертификаты каждое воскресенье в 0 часов 0 минут.
 
== Ограничения ==
 
== Ограничения ==
 
+
У Let’s Encrypt действуют такие ограничения:
 +
* 20 сертификатов на 1н домен в неделю;
 +
* 100 сабдоменов на 1н сертификат;
 +
* 5 повторяющихся запросов для домена/сабдомена в неделю;
 +
* 5 неудачных попыток верификации на аккаунт, доменное имя в час;
 +
* 500 аккаунтов на IP за 3 часа;
 +
* 300 ожидающих авторизации запросов на аккаунт.
  
 
[[Категория:Web]]
 
[[Категория:Web]]

Версия 17:46, 8 апреля 2017

Letsencrypt-logo-horizontal.svg

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 или 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 ожидающих авторизации запросов на аккаунт.