> ## Documentation Index
> Fetch the complete documentation index at: https://wiki.lumiweb.cc/llms.txt
> Use this file to discover all available pages before exploring further.

# SSL и Let's Encrypt

> HTTPS на своём сервере

<Note>
  Эта страница — для тех, кто сам поднимает сайт на сервере (нужен доступ по SSH). Просто купил VPS под софт или VPN — SSL тут, скорее всего, не нужен.
</Note>

## Варианты сертификата

<CardGroup cols={3}>
  <Card title="Universal SSL" icon="cloud">
    Автоматически в [Cloudflare](/domains/cloudflare). Шифрует «браузер ↔ CF».
  </Card>

  <Card title="CF Origin CA" icon="certificate">
    Бесплатный серт на origin, 15 лет. Шифрует «CF ↔ origin».
  </Card>

  <Card title="Let's Encrypt" icon="certificate">
    Публичный, 90 дней, автообновление. Для end-to-end и Full (Strict).
  </Card>
</CardGroup>

<Tip>
  Продакшен-рекомендация: **Cloudflare Full (Strict) + Let's Encrypt на origin**. Шифрование от браузера до сервера, без дыр.
</Tip>

## Установка Let's Encrypt

Дальше всё через SSH под `root` (IP и пароль — в карточке сервера в боте). По умолчанию на сервере Ubuntu 22.04.

<Steps>
  <Step title="Проверить предусловия">
    * A-запись домена указывает на IP сервера (тот, что в карточке сервера в боте). Как добавить — [DNS-записи](/domains/dns).
    * Порты 80 и 443 открыты в фаерволе.
    * Веб-сервер (nginx или apache) запущен.
  </Step>

  <Step title="Обновить систему">
    ```bash theme={"system"}
    sudo apt-get -y update && sudo apt-get -y upgrade
    ```
  </Step>

  <Step title="Установить certbot">
    ```bash theme={"system"}
    sudo apt-get -y install certbot python3-certbot-nginx
    ```

    Для Apache — `python3-certbot-apache`.
  </Step>

  <Step title="Получить сертификат">
    ```bash theme={"system"}
    sudo certbot certonly --nginx -d example.com -d www.example.com
    ```

    Путь: `/etc/letsencrypt/live/example.com/`.
  </Step>
</Steps>

## Обновление

Сертификат живёт 90 дней. Certbot ставит системный таймер автообновления — настраивать ничего не нужно. Для проверки:

```bash theme={"system"}
sudo certbot certificates
sudo certbot renew --dry-run
```

## Wildcard (`*.example.com`)

Только через DNS-челлендж:

```bash theme={"system"}
sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com"
```

Процесс интерактивный: certbot попросит создать TXT-запись `_acme-challenge` в [DNS домена](/domains/dns). Дождись, пока запись распространится, и только потом нажми Enter.

## Частые ошибки

| Ошибка             | Причина                      | Что делать                                                   |
| ------------------ | ---------------------------- | ------------------------------------------------------------ |
| Timeout            | Порт 80 закрыт               | Открыть в фаерволе                                           |
| Domain not found   | A-запись не распространилась | Подождать, проверить [DNS](/domains/dns)                     |
| Connection refused | nginx/apache не запущен      | `sudo systemctl start nginx`                                 |
| Rate limit         | Слишком много запросов       | Подождать. Лимит: 5 неудач/час, 50 сертификатов/домен/неделю |

## Куда дальше

<CardGroup cols={2}>
  <Card title="Веб-сервер (Nginx)" icon="server" href="/vps/webserver">
    Настрой Nginx для работы с сертификатом.
  </Card>

  <Card title="Защита сервера" icon="lock" href="/vps/hardening">
    Следующий шаг — закрыть остальные дыры.
  </Card>
</CardGroup>
