International conference of developers
and users of free / open source software

Как перестать страдать* и начать использовать Let's Encrypt

Aliaksandr Kharkevich, Volha Kharkevich, Gomel, Belarus

LVEE Winter 2016

This article describes several types of SSL certificates, CA with issuing certificates for free, ACME protocol and Let's Encrypt as Certificate Authority.

Глобальное движение в сторону HTTPS

HTTPS – это обычный HTTP, работающий через шифрованные транспортные механизмы SSL и TLS. Он обеспечивает защиту от атак, основанных на прослушивании сетевого соединения.

Глобальный переход на SSL стал трендом, и разработчики двух популярных браузеров, Mozilla Firefox1 и Chromium2 планируют помечать http-ресурсы как небезопасные (Non-secure).


StatCounter – статистика за 2015 год


Пример небезопаснго веб-сайта

При этом в Google уже с 2014 года предпочтение отдается сайтам с https3.

Виды SSL-сертификатов

Можно выделить следующие виды сертификатов:

  • Domain Validation – сертификат, подтверждающий только доменное имя.
  • Organization Validation – сертификат, подтверждающий домен и организацию.
  • Extended Validation – сертификат с расширенной проверкой.

Если Organization Validation и Extended Validation продаются только за деньги, то Domain Validation бывает и бесплатный.

В дальнейшем будем рассматривать только сертификаты Domain Validation.

Варианты получения SSL-сертификатов

В реальной жизни для получения сертификатов существуют следующие варианты:

  • Самоподписанные сертификаты (self-signed-certificate) и сертификаты, подписанные собственным центром сертификации.
    • Из плюсов – возможность самостоятельно создавать неограниченное количество SSL-сертификатов; отсутствие денежных затрат; быстрота в создании; в случае собственного удостоверяющего центра – доверие к данному сертификату.
    • Из мнусов – необходимость добавления удостоверяющего центра в список доверенных ЦС вручную либо аналогичной процедуры для самоподписанных сертификатов; в случае использования собственного удостоверяющего центра – дополнительные требования по размещению и защите.
  • Платные сертификаты от известных центров сертификации.
    • Из их плюсов – внешний гарант подлинности.
    • Из минусов – нужно платить деньги.
  • Коммерческие триальные SSL-сертификаты в качестве бесплатных.
    • Из их плюсов – бесплатность.
    • Из минусов – малый срок действия и невозможность заказать повторно.
  • Бесплатные сертификаты от StartSSL.
    • Из их плюсов – бесплатность.
    • Из минусов – ручная установка сертификатов на сервер; сертификат бесплатен только для некоммерческого использования; сложности с отзывом сертификата.
  • Бесплатные сертификаты от WoSign.
    • Из их плюсов – сертификат действительно бесплатный; у них появился англоязычный интерфейс; поддержка до пяти поддоменов в запросе на сертификат.
      WoSign на китайском языке
    • Из минусов – ручная установка сертификатов на сервер; OCSP в Китае; для поддоменов постоянно урезаются лимиты; потенциальный MitM в связи с наличием The Golden Shield Project.
  • Бесплатные сертификаты от Let’s Encrypt.
    • Из минусов – новый игрок на рынке (требуется обновить списки CA); еще не вышел из бета-версии; только DV-сертификаты; есть некоторые лимиты на выпуск/перевыпуск сертификатов.
    • Из плюсов – нет ограничения по применению сертификатов; может использоваться в коммерческих проектах; ACME – полностью автоматический процесс выдачи сертификата; срок действия сертификата до 90 дней.

Let’s Encrypt – наш выбор

Шаги по установлению глобального доверия

Для подписания пользовательских сертификатов Let’s Encrypt использует промежуточные сертификаты, которые кроме корневой подписи имеют перекрестную подпись от IdenTrust. Такая конфигурация позволила как минимум взлететь на тех браузерах, в которых еще ничего не было сказано про корневой сертификат Let’s Encrypt 4


Перекрестная подпись промежуточных сертификатов

Как работает ACME (Automatic Certificate Management Environment)

Для получения сертификата необходимо доказать центру сертификации, что домен, для которого пришел запрос сертификата, принадлежит запросившей сертификат стороне.

Это происходит в несколько шагов.

В первый раз взаимодействуя с Let’s Encrypt CA, агент сгенерирует пару ключей, которые будет использовать для доказательства наличия прав на доменное имя.

Агент отправляет запрос в Let’s Encrypt CA с указанием домена, который необходимо подтвердить.

Let’s Encrypt CA оценивает домен и выдает клиенту как минимум одну задачу на доказательство владения доменом:

  • Создание DNS-записи в доменной зоне для запрошенного домена.
  • Создание ресурса, доступного по HTTP на известном URI для запрошенного домена.

Наряду с решением вышеописанной задачи, Let’s Encrypt CA создает одноразовый ключ, который агент должен подписать своим закрытым ключом для домена, чтобы доказать, что он контролирует ключевую пару.

Агент выполняет выбранную задачу и уведомляет сервер о готовности пройти валидацию.

Let’s Encrypt CA проверяет электронную цифровую подпись и доступность файлов или записей в DNS.

В случае, если цифровая подпись верна и выбранная задача решена верно, Let’s Encrypt CA считает, что агент имеет право на управление сертификатами для запрошенного домена.

Ключевая пара, использованная агентом, становится «авторизованной парой ключей» для запрошенного домена.


Успешное выполнение всех задач от Let’s Encrypt

После авторизации агент может запросить, обновить или отозвать сертификаты для своего домена. Сообщения должны быть подписаны авторизованной парой ключей.

Выпуск сертификата


Отзыв сертификата

Клиенты/плагины для Let’s Encrypt

Для Let’s Encrypt существует как официальная реализация клиентской части, так и множество других реализаций протокола ACME (написаны на Python, Go, C#, Ruby, Bash).

Официальный клиент поддерживает расширение функциональности за счет плагинов. На текущий момент, реализованные плагины представлены на странице github 5.

Написать свой плагин достаточно просто: нужно всег лишь прочитать документацию 6 и написать его.

Примеры из реальной жизни и немного статистики

Судя по crt.sh – Let’s Encrypt выпустил громадное количество сертификатов и с отрывом лидирует над остальными.


Статистика по версии от crt.sh

Забытые обновления сертификатов

В заключение – несколько случаев пропущенных обновлений сертификатов:

  • Ростелеком в 2010 году 7
  • Хабр и habrastorage.org в 2014 году 8
  • RU-CENTER (ssl.ru) в 2016 году

Полезные ссылки

1 Mozilla Security Blog: Deprecating Non-Secure HTTP

2 The Chromium Projects proposal: Marking HTTP As Non-Secure

3 Google Webmaster Central Blog: HTTPS as a ranking signal

4 Let’s Encrypt certificates

5 Letsencrypt officially supported plugins

6 Writing your own letsencrypt plugin

7 Geektimes: Ростелеком забыл обновить ssl-сертификат gosuslugi.ru

8 Geektimes: Пора обновить сертификат на Habrastorage.org!

9 Поиск по сертификатам.

10 Тестирование конфигурации SSL.

11 Генератор SSL конфигурационных файлов от Mozilla.

12 Анализ веб-трафика.

13 Let’s Encrypt how it works.

Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license

Back