arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
328 lines (231 loc) • 15.2 kB
Markdown
[Let’s Encrypt](https://letsencrypt.org/) бесплатный, автоматизированный, открытый центр сертификации использующий [ACME](https://en.wikipedia.org/wiki/Automated_Certificate_Management_Environment "wikipedia:Automated Certificate Management Environment") протокол.
Официальный клиент называется 'Certbot', который позволяет запрашивать действительные сертификаты X.509 прямо из командной строки. Минимальный клиент с ручным созданием CSR доступен в [acme-tiny](https://www.archlinux.org/packages/?name=acme-tiny), клиенты, подходящие для скриптов, - это [simp_le-git](https://aur.archlinux.org/packages/simp_le-git/) и [letsencrypt-cli](https://aur.archlinux.org/packages/letsencrypt-cli/).
## Contents
* [1 Установка](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0)
* [2 Конфигурация](#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F)
* [2.1 Webroot](#Webroot)
* [2.1.1 Получить сертификат(ы)](#.D0.9F.D0.BE.D0.BB.D1.83.D1.87.D0.B8.D1.82.D1.8C_.D1.81.D0.B5.D1.80.D1.82.D0.B8.D1.84.D0.B8.D0.BA.D0.B0.D1.82.28.D1.8B.29)
* [2.2 Вручную](#.D0.92.D1.80.D1.83.D1.87.D0.BD.D1.83.D1.8E)
* [3 Расширенная настройка](#.D0.A0.D0.B0.D1.81.D1.88.D0.B8.D1.80.D0.B5.D0.BD.D0.BD.D0.B0.D1.8F_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0)
* [3.1 Конфигурация веб-сервера](#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.B2.D0.B5.D0.B1-.D1.81.D0.B5.D1.80.D0.B2.D0.B5.D1.80.D0.B0)
* [3.1.1 nginx](#nginx)
* [3.2 Несколько доменов](#.D0.9D.D0.B5.D1.81.D0.BA.D0.BE.D0.BB.D1.8C.D0.BA.D0.BE_.D0.B4.D0.BE.D0.BC.D0.B5.D0.BD.D0.BE.D0.B2)
* [3.2.1 nginx](#nginx_2)
* [3.2.2 Apache](#Apache)
* [3.3 Автоматическое обновление](#.D0.90.D0.B2.D1.82.D0.BE.D0.BC.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.BE.D0.B5_.D0.BE.D0.B1.D0.BD.D0.BE.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5)
* [3.3.1 systemd](#systemd)
* [3.3.1.1 Альтернативные услуги](#.D0.90.D0.BB.D1.8C.D1.82.D0.B5.D1.80.D0.BD.D0.B0.D1.82.D0.B8.D0.B2.D0.BD.D1.8B.D0.B5_.D1.83.D1.81.D0.BB.D1.83.D0.B3.D0.B8)
* [3.3.1.1.1 nginx](#nginx_3)
* [3.3.1.1.2 Apache](#Apache_2)
* [4 Смотрите также](#.D0.A1.D0.BC.D0.BE.D1.82.D1.80.D0.B8.D1.82.D0.B5_.D1.82.D0.B0.D0.BA.D0.B6.D0.B5)
## Установка
[Установить](/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C "Установить") пакет [certbot](https://www.archlinux.org/packages/?name=certbot).
Плагины доступны для автоматической настройки и установки выданных сертификатов на веб-серверах:
* Экспериментальный плагин для [Nginx](/index.php/Nginx "Nginx") предоставляется пакетом [certbot-nginx](https://www.archlinux.org/packages/?name=certbot-nginx).
* Автоматическая установка с использованием [Apache HTTP Server](/index.php/Apache_HTTP_Server "Apache HTTP Server") включена через пакет [certbot-apache](https://www.archlinux.org/packages/?name=certbot-apache).
## Конфигурация
Для получения дополнительной информации об создании и использовании сертификатов обращайтесь в документацию [Certbot documentation](https://certbot.eff.org/docs/)
### Webroot
**Примечание:**
* Метод Webroot требует HTTP на порт 80 для проверки Certbot.
* Чтобы Certbot проверял использование HTTPS на порту 443, вместо Webroot следует использовать плагин Nginx (--nginx) или Apache ( --apache) (--webroot).
* Имя сервера должно соответствовать имени соответствующего DNS.
* На хосте могут потребоваться разрешения, чтобы разрешить доступ для чтения к `[http://domain.tld/.well-known](http://domain.tld/.well-known)`.
При использовании метода webroot клиент Certbot отправляет запрос вызова внутри `/path/to/domain.tld/html/.well-known/acme-challenge/` который используется для проверки.
Использование этого метода рекомендуется для ручной установки; Он предлагает автоматическое обновление и упрощение управления сертификатами.
**Совет:** Следующая первоначальная конфигурация сервера [nginx server](/index.php/Nginx#Server_blocks "Nginx") может оказаться полезной для получения первого сертификата: `/etc/nginx/servers-available/domain.tld`
```
server {
listen 80;
listen [::]:80;
server_name domain.tld;
root /usr/share/nginx/html;
location / {
index index.htm index.html;
}
}
# ACME challenge
location ^~ /.well-known {
allow all;
auth_basic off;
alias /var/lib/letsencrypt/.well-known/;
default_type "text/plain";
try_files $uri =404;
}
```
#### Получить сертификат(ы)
Запросить сертификат для `domain.tld` для `/var/lib/letsencrypt/` как общедоступный путь:
```
# certbot certonly --email **email@example.com** --webroot -w **/var/lib/letsencrypt/** -d **domain.tld**
```
Чтобы добавить (дополнительный) домен(ы), включите все зарегистрированные домены, используемые в текущей настройке:
```
# certbot certonly --email **email@example.com** --webroot -w **/var/lib/letsencrypt/** -d **domain.tld,sub.domain.tld**
```
Чтобы обновить (все) текущий сертификат (ы):
```
# certbot renew
```
Смотрите [#Автоматическое обновление](#.D0.90.D0.B2.D1.82.D0.BE.D0.BC.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.BE.D0.B5_.D0.BE.D0.B1.D0.BD.D0.BE.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5) как альтернативный вариант
### Вручную
**Note:**
* Запускаемый веб-сервер должен быть временно остановлен.
* Автоматическое обновление недоступно при выполнении ручной установки, см. [#Webroot](#Webroot).
Если для вашего веб-сервера нет плагина, используйте следующую команду:
```
# certbot certonly --manual
```
Если вы предпочитаете использовать DNS-запрос (запись TXT), используйте:
```
# certbot certonly --manual --preferred-challenges dns
```
Это автоматически проверяет ваш домен и создает закрытый ключ и пару сертификатов. Они будут размещены в `/etc/letsencrypt/live/*your.domain*/`.
Затем вы можете вручную настроить веб-сервер для использования ключа и сертификата в этом каталоге.
**Note:** Запуск этой команды несколько раз приведет к созданию нескольких наборов файлов в в `/etc/letsencrypt/live/*your.domain*/` с произвольным числом в конце, поэтому позаботьтесь о том, чтобы переименовать их в этом каталоге или в файле конфигурации веб-сервера.
## Расширенная настройка
### Конфигурация веб-сервера
Вместо использования плагинов для автоматической настройки может быть предпочтительнее включить SSL для сервера вручную.
**Tip:**
* Mozilla имеет полезную статью [SSL/TLS article](https://wiki.mozilla.org/Security/Server_Side_TLS), которая включает в себя [automated tool](https://mozilla.github.io/server-side-tls/ssl-config-generator/) чтобы создать более безопасную конфигурацию.
* [Cipherli.st](https://cipherli.st) обеспечивает надежные примеры внедрения SSL и руководство для большинства современных веб-серверов.
#### nginx
Пример сервера `domain.tld` с использованием подписанного SSL-сертификата Let's Encrypt:
`/etc/nginx/servers-available/domain.tld`
```
# redirect to https
server {
listen 80;
listen [::]:80;
server_name domain.tld;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/domain.tld/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
server_name domain.tld;
..
}
# A subdomain uses the same SSL-certifcate:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/domain.tld/chain.pem;
..
server_name sub.domain.tld;
..
}
# ACME challenge
location ^~ /.well-known {
allow all;
alias /var/lib/letsencrypt/.well-known/;
default_type "text/plain";
try_files $uri =404;
}
```
### Несколько доменов
Управление может быть упрощено путем сопоставления всех HTTP-запросов для `/.well-known/acme-challenge/` в одну папку, например. `/var/lib/letsencrypt`.
Затем путь должен быть доступен для записи клиенту Let's Encrypt и веб-серверу (например, [nginx](/index.php/Nginx "Nginx") или [Apache](/index.php/Apache "Apache"), запущенному под пользователем *http*):
```
# mkdir -p /var/lib/letsencrypt/.well-known
# chgrp http /var/lib/letsencrypt
# chmod g+s /var/lib/letsencrypt
```
#### nginx
Создайте файл, содержащий блок местоположения, и включите его внутри блока сервера:
`/etc/nginx/conf.d/letsencrypt.conf`
```
location ^~ /.well-known {
allow all;
alias /var/lib/letsencrypt/.well-known/;
default_type "text/plain";
try_files $uri =404;
}
```
Пример конфигурации сервера:
`/etc/nginx/servers-available/domain.conf`
```
server {
server_name domain.tld
..
include conf.d/letsencrypt.conf;
}
```
#### Apache
Создайте файл `/etc/httpd/conf/extra/httpd-acme.conf`:
`/etc/httpd/conf/extra/httpd-acme.conf`
```
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
AllowOverride None
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
</Directory>
```
Включив в `/etc/httpd/conf/httpd.conf`:
`/etc/httpd/conf/httpd.conf`
```
Include conf/extra/httpd-acme.conf
```
### Автоматическое обновление
#### systemd
Создайте [systemd](/index.php/Systemd "Systemd") `certbot.service`:
`/etc/systemd/system/certbot.service`
```
[Unit]
Description=Let's Encrypt renewal
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet --agree-tos
```
Вероятно, вы захотите, чтобы ваш веб-сервер перезагружал сертификаты после каждого обновления. Добавте одну из этих строк в файл `certbot.service`:
* Apache: `ExecStartPost=/bin/systemctl reload httpd.service`
* nginx: `ExecStartPost=/bin/systemctl reload nginx.service`
**Примечание:** Перед добавлением [timer](/index.php/Systemd/Timers "Systemd/Timers") убедитесь, что служба работает правильно и ничего не пытается запросить.
Добавьте таймер для проверки продления сертификата дважды в день и включите рандомизированную задержку, чтобы все запросы на продление были равномерно распределены в течение дня, чтобы облегчить загрузку сервера Let's Encrypt [[1]](https://certbot.eff.org/#arch-nginx):
`/etc/systemd/system/certbot.timer`
```
[Unit]
Description=Twice daily renewal of Let's Encrypt's certificates
[Timer]
OnCalendar=0/12:00:00
RandomizedDelaySec=1h
Persistent=true
[Install]
WantedBy=timers.target
```
[enable](/index.php/Enable "Enable") и [start](/index.php/Start "Start") `certbot.timer`.
##### Альтернативные услуги
При использовании автономного метода, перед выполнением запроса на обновление, вы должны остановить свой веб-сервер и запустить веб-сервер, когда работа Certbot будет завершена. Certbot предоставляет hooks для автоматического остановки и перезапуска веб-сервера.
###### nginx
`/etc/systemd/system/certbot.service`
```
[Unit]
Description=Let's Encrypt renewal
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --post-hook "/usr/bin/systemctl restart nginx.service" --agree-tos
```
###### Apache
`/etc/systemd/system/certbot.service`
```
[Unit]
Description=Let's Encrypt renewal
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --pre-hook "/usr/bin/systemctl stop httpd.service" --post-hook "/usr/bin/systemctl start httpd.service" --quiet --agree-tos
```
## Смотрите также
* [EFF's Certbot documentation](https://certbot.eff.org/)
* [List of ACME clients](https://letsencrypt.org/docs/client-options/)