>IndieWebDNS - Корневой сертификат

Корневой сертификат

Сайты в зонах IndieWebDNS могут работать по HTTPS. Сертификаты для них выдаёт наш собственный центр сертификации, а не Let's Encrypt, поэтому браузер предупреждает об опасности, пока вы не установите наш корневой сертификат. Сделать это нужно один раз на каждом устройстве.

Скачать корневой сертификат
iwdns-root.crt, «IndieWebDNS Root CA»

Отпечаток SHA-256. Сверьте его с тем, что покажет система при установке:

B6:F1:94:45:49:13:A4:71:DA:55:EF:CB:D4:52:E4:44:EF:A9:FF:CC:97:C1:9D:D3:1F:B3:19:6F:26:D4:8B:40

Это безопасно?

Корневой сертификат позволяет выдавать сертификаты сайтам, поэтому мы его ограничили: он действует только для имён в наших зонах. Подделать с его помощью сертификат для обычного сайта, например банка или почты, нельзя, даже если ключ попадёт в чужие руки. Это ограничение записано в самом сертификате (Name Constraints), и браузеры его проверяют.

Ключ корневого сертификата не хранится на сервере. Удалить сертификат можно в любой момент там же, где вы его устанавливали.

>Для пользователей

Для пользователей

Выберите свою систему. Firefox хранит сертификаты отдельно от системы, поэтому для него есть свой раздел.

Windows

  1. Скачайте сертификат и откройте файл двойным щелчком.
  2. Нажмите «Установить сертификат» и выберите «Текущий пользователь».
  3. Выберите «Поместить все сертификаты в следующее хранилище», нажмите «Обзор» и укажите «Доверенные корневые центры сертификации».
  4. Нажмите «Далее», «Готово» и подтвердите предупреждение Windows. В нём должно стоять имя «IndieWebDNS Root CA».
  5. Перезапустите браузер.

Chrome, Edge, Opera и Яндекс Браузер берут сертификаты из Windows, для них больше ничего делать не нужно.

macOS

  1. Откройте файл двойным щелчком и добавьте его в связку ключей «Система».
  2. В программе «Связка ключей» найдите «IndieWebDNS Root CA» и откройте его.
  3. В разделе «Доверие» для пункта «При использовании этого сертификата» выберите «Всегда доверять», закройте окно и подтвердите паролем.

Linux

Arch, Fedora и другие системы с p11-kit:

sudo trust anchor --store iwdns-root.crt

Debian, Ubuntu, Mint:

sudo cp iwdns-root.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

Это включит доверие для системных программ. Браузеры на Linux хранят сертификаты сами: для Firefox смотрите раздел ниже, а в Chrome и Chromium откройте Настройки → Конфиденциальность и безопасность → Безопасность → Управление сертификатами и импортируйте файл как центр сертификации, разрешив ему подтверждать сайты.

Firefox (любая система)

  1. Нажмите на ссылку на сертификат прямо в Firefox. Появится окно «Загрузка сертификата».
  2. Отметьте «Доверять при идентификации веб-сайтов» и нажмите OK.

Если окно не появилось и файл просто скачался: Настройки → Приватность и защита → Сертификаты → Просмотр сертификатов → вкладка «Центры сертификации» → «Импортировать». Выберите файл и отметьте тот же пункт.

Если раньше вы нажимали «Принять риск и продолжить» на одном из наших сайтов, удалите это исключение: в том же окне, вкладка «Серверы».

Android

  1. Скачайте сертификат.
  2. Откройте Настройки → Безопасность → Шифрование и учётные данные → Установить сертификат → «Сертификат ЦС». На разных телефонах путь отличается, проще найти пункт «Сертификат ЦС» через поиск в настройках.
  3. Подтвердите предупреждение и выберите скачанный файл.

Chrome и большинство браузеров на его основе сразу начнут доверять сертификату. Firefox для Android по умолчанию его не видит: откройте Настройки → О Firefox, пять раз нажмите на логотип, вернитесь в настройки и в «Секретных настройках» включите использование сторонних сертификатов ЦС.

Многие другие приложения не доверяют сертификатам, установленным пользователем. Так устроен Android.

iPhone и iPad

  1. Откройте ссылку на сертификат в Safari и разрешите загрузку профиля.
  2. Настройки → Основные → VPN и управление устройством → «IndieWebDNS Root CA» → «Установить».
  3. Настройки → Основные → Об этом устройстве → Доверие сертификатам → включите «IndieWebDNS Root CA».

Без третьего шага сертификат будет установлен, но сайтам Safari доверять не станет.

Проверка

Откройте https://test.iwdns/. Если страница загрузилась без предупреждения, всё сделано правильно. Наш DNS при этом должен быть подключён.

>Для разработчиков

Для разработчиков

Сертификат для своего домена в IndieWebDNS можно получать автоматически по протоколу ACME, так же, как у Let's Encrypt. Подойдёт любой ACME-клиент: Caddy, certbot, acme.sh и другие. Это бесплатно.

ACME-адресhttps://ca.lainlife.org/acme/acme/directory
Проверка доменаHTTP-01, через порт 80
Срок сертификата30 дней, продление автоматическое
Почтане нужна

Что нужно

  • Домен в одной из наших зон, зарегистрированный у нас.
  • A- или AAAA-запись домена указывает на ваш сервер. Адреса в Yggdrasil тоже подходят.
  • Порт 80 открыт: наш центр сертификации проверяет домен, заходя на http://ваш-домен/.well-known/acme-challenge/. Для адресов в Yggdrasil порт должен быть доступен из сети Yggdrasil.
  • Сертификат выдаётся только на имена в наших зонах, на IP-адреса нет.

Caddy

http://example.lain, https://example.lain {
    tls {
        ca https://ca.lainlife.org/acme/acme/directory
    }
    reverse_proxy 127.0.0.1:8080
}

Адрес с http:// указан отдельно, чтобы Caddy не перенаправлял посетителей на HTTPS: у тех, кто не установил наш корневой сертификат, по HTTPS будет предупреждение, а по HTTP сайт откроется у всех. Получать и продлевать сертификат Caddy будет сам.

nginx и certbot

  1. Получите сертификат, указав папку, из которой nginx отдаёт сайт:
    certbot certonly --webroot -w /var/www/example -d example.lain \
      --server https://ca.lainlife.org/acme/acme/directory \
      --register-unsafely-without-email --agree-tos \
      --deploy-hook "systemctl reload nginx"
  2. Сертификаты у нас на 30 дней, а certbot по умолчанию продлевает их за 30 дней до конца, то есть при каждой проверке. Добавьте в начало файла /etc/letsencrypt/renewal/example.lain.conf строку:
    renew_before_expiry = 10 days
  3. Добавьте в nginx блок для HTTPS, а старый блок для HTTP оставьте как есть:
    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name example.lain;
    
        ssl_certificate     /etc/letsencrypt/live/example.lain/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.lain/privkey.pem;
    
        # дальше всё как в вашем блоке для порта 80
    }
  4. Проверьте продление:
    certbot renew --dry-run --cert-name example.lain \
      --server https://ca.lainlife.org/acme/acme/directory
    Ключ --server здесь нужен: без него в режиме проверки certbot может обратиться к Let's Encrypt, а тот наших зон не знает.

Другие ACME-клиенты

Укажите ACME-адрес из таблицы и настройте продление не позже чем через 20 дней после выдачи. Многие клиенты рассчитаны на 90-дневные сертификаты Let's Encrypt и по умолчанию продлевают слишком поздно.

Советы

  • Не включайте принудительное перенаправление на HTTPS и HSTS: у тех, кто не установил корневой сертификат, сайт перестанет открываться.
  • Проверить сайт, не устанавливая корень в систему:
    curl --cacert iwdns-root.crt -I https://example.lain/
  • Если сертификат не выдаётся, убедитесь, что домен указывает на ваш сервер и что http://example.lain/ открывается с другого компьютера:
    dig example.lain @91.196.163.183