Проблема выпуска

Вы можете сгенерировать пару ключей самостоятельно за секунды, но голый открытый ключ ничего не доказывает о том, кто вы (проблема связывания из статьи об анатомии). Чтобы получить сертификат, вам нужен удостоверяющий центр, которому полагающаяся сторона уже доверяет, чтобы поручиться, что этот открытый ключ принадлежит вашему имени. Запрос на Подпись Сертификата (Certificate Signing Request) — это то, как вы это запрашиваете, ни разу не передавая ваш приватный ключ.

Что содержит CSR

сам по себе является структурой .1, определённой PKCS#10 (RFC 2986) и обычно отправляемой как блок с меткой CERTIFICATE REQUEST. Он несёт:

  • субъект (subject), который вы запрашиваете (имена, которые должны оказаться в сертификате),
  • ваш открытый ключ, и
  • подпись над запросом, сделанную соответствующим приватным ключом.

Эта последняя часть — хитрая деталь. Подписывая запрос приватным ключом, вы доказываете, что действительно держите ключ, который образует пару с открытым ключом, который вы представили, всё это не раскрывая сам приватный ключ. Приватный ключ никогда не покидает ваш контроль, что именно так, как и должно быть, потому что любой, у кого он есть, может выдать себя за вас.

CA — это авторитет, а не запрашивающий

Решающий момент: CSR — это запрос, и волен почтить части его и проигнорировать другие. Вы можете запросить любой субъект и любые расширения, какие хотите, но CA решает, что выпущенный сертификат фактически говорит. Он установит срок действия согласно текущим правилам, выберет серийный номер, и включит лишь имена и использования, за которые он готов поручиться. Подпись CA, а не ваш запрос, — это то, что даёт окончательному сертификату его авторитет. Это разделение и есть причина, почему CSR, полный амбициозных полей, не даёт вам сертификата, полного ими.

Как CA решает вам доверять

Перед подписанием CA проверяет, что вы имеете право на имена, которые вы запросили, и насколько тщательно зависит от типа сертификата:

  • Validated по домену (DV) доказывает лишь, что вы контролируете домен. Это подавляющее большинство TLS-сертификатов сегодня.
  • Validated по организации (OV) и Расширенная валидация (EV) дополнительно проверяют юридическое лицо за доменом, Subject Identity Information, которая появляется в сертификате.

Для DV, CA бросает вам вызов продемонстрировать контроль над доменом. Распространённые методы — поместить определённый файл по URL на сайте (HTTP-01), опубликовать определённую запись DNS (DNS-01), или ответить на письмо, отправленное на адрес в домене. Прохождение вызова — это то, что убеждает CA, что открытый ключ в вашем CSR должен быть привязан к тому имени.

Самоподписанные сертификаты обходят CA

Если вы подписываете свой собственный CSR своим собственным ключом вместо отправки его в CA, вы получаете самоподписанный сертификат, где Issuer равен Subject. Он не несёт никакого внешнего авторитета, потому что единственное, что за него ручается, — это он сам, но он совершенно полезен для локальной разработки, внутренних сервисов со своим собственным хранилищем доверия, или для роли корня частной . Инструмент отмечает, когда сертификат самовыпущен, что говорит вам немедленно, что его доверие исходит откуда-то ещё, нежели публичный CA.

ACME: автоматизация обмена

Делать всё это вручную, повторно, — это именно то, что переход к коротким срокам жизни сертификатов делает невозможным (см. статью об отзыве). Протокол (RFC 8555), популяризированный Let's Encrypt, автоматизирует весь разговор: клиент генерирует пару ключей и CSR, доказывает контроль над доменом через HTTP-01 или DNS-01 автоматически, получает сертификат, и повторяет перед каждым истечением, без участия человека. ACME — это причина, по которой миллионы сайтов могут работать на сертификатах, обновляющихся каждые несколько недель, и это операционный хребет будущего короткоживущих сертификатов.

Запрос становится удостоверением

Дуга проста для формулировки. Вы держите пару ключей. CSR просит CA поручиться за публичную половину, доказывая по пути, что вы держите приватную половину. CA проверяет, что вы контролируете имя, затем выпускает сертификат, чей авторитет исходит из подписи CA, а не из чего-либо, что вы написали в запросе. Инспектирование результата декодировщиком показывает вам связывание, которое CA фактически сделал, что и есть весь смысл упражнения: превратить анонимный ключ в ключ с прикреплённым доверенным именем.