Перейти к содержимому
buybitcoinsmart

Глоссарий / Справочник разработчика

Промежуточный сертификат

Что такое промежуточный сертификат?
Промежуточный сертификат стоит между корневым и конечным: его подписывает корневой, а он подписывает конечный, поэтому приватный ключ корневого сертификата может оставаться офлайн и не использоваться.

Удостоверяющие центры никогда не подписывают сертификат сайта корневым ключом. Они подписывают промежуточный сертификат, держат корневой ключ офлайн и выпускают сертификаты от промежуточного, который можно заменить за недели, а не за двадцать лет, которые живет корневой. Когда сервер забывает отправить свой промежуточный сертификат, браузеры скрывают этот пробел, а более строгие клиенты нет, поэтому сайт может нормально выглядеть в Chrome и не работать в приложении.

Как это работает

Промежуточный сертификат представляет собой сертификат удостоверяющего центра, который не является якорем доверия. Он несет расширение basicConstraints с признаком CA, установленным в true, что позволяет ему подписывать другие сертификаты, и сам подписан корневым или другим промежуточным сертификатом. Проверка идет вверх от сертификата сервера: каждая подпись сверяется с ключом из сертификата уровнем выше, и проверка останавливается, когда доходит до чего-то, что уже есть в локальном хранилище доверия.

Такое разделение выпуска дает три вещи. Корневой ключ остается в офлайн-модуле, который извлекают только для регламентированных церемоний со свидетелями. Ущерб ограничен, потому что скомпрометированный промежуточный сертификат можно отозвать и выпустить заново, не трогая корневое хранилище ни одного устройства. И удостоверяющий центр может разделить свои продуктовые линейки, так что проблемы дешевого автоматизированного уровня не затрагивают проверенный аудитом.

Перекрестное подписание является тем приемом, который вообще позволяет использовать новый удостоверяющий центр. Один промежуточный ключ может нести два сертификата: один подписан корневым сертификатом своей организации, другой подписан давно признанным корневым сертификатом, который уже стоит на старых устройствах. Let's Encrypt полагался на это годами, потому что ISRG Root X1 отсутствовал в версиях Android, которые перестали получать обновления, поэтому сервис отдавал цепочку с перекрестной подписью от IdenTrust. Эта подпорка пережила корневой сертификат за ней, который истек 30 сентября 2021 года, и Let's Encrypt окончательно перестал отдавать цепочку с перекрестной подписью 6 июня 2024 года.

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

Где это встречается

BIP70 включал промежуточные сертификаты в само сообщение о платеже. Поле pki_data несло структуру X509Certificates, первым элементом которой был собственный сертификат продавца, а за ним шли промежуточные сертификаты, нужные для перехода к корневому, причем корневой опускался, так как предполагалось, что кошелек его уже хранит. Это ровно тот порядок, который отправляет TLS-сервер, перенесенный в protocol buffer.

Вне биткоина промежуточные сертификаты дают о себе знать всякий раз, когда соединение проходит в одной программе и не проходит в другой. Криптобиржа, у которой конечная точка API выдает ошибку сертификата торговому скрипту, тогда как сайт загружается нормально, почти всегда потеряла промежуточный сертификат из своей цепочки. Проверка инструментом, который не выполняет тихое исправление браузера, является способом поймать это раньше вашего бота.

Промежуточный сертификат vs корневой сертификат

Корневой и промежуточный сертификаты оба являются сертификатами удостоверяющего центра, а разница в том, кто их подписал и где хранится ключ. Корневой сертификат самоподписан и берет силу из списка включения производителя. Промежуточный берет силу из подписи над ним, а значит, выпустивший его удостоверяющий центр может отозвать его за один день, без обновления программного обеспечения где-либо. В повседневной работе промежуточный сертификат выполняет почти все подписания, а корневой почти никаких, и эта асимметрия и есть вся причина существования такого уровня.

Не путать с

Часто задаваемые вопросы

Почему сайт загружается в браузере, но не работает в приложении или скрипте?

Обычно из-за отсутствующего промежуточного сертификата. Браузеры тихо загружают отсутствующий сертификат через расширение доступа к информации удостоверяющего центра, а большинство библиотек и клиентов командной строки этого не делают, поэтому один и тот же сервер в одном месте выглядит доверенным, а в другом нет.

Можно ли отозвать промежуточный сертификат?

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

Связанные термины

Еще в разделе «Справочник разработчика»

Читать эту страницу на английском