Go начнёт отвергать цепочки сертификатов с восемью недоверенными ключами

· Безопасность
В ветку go1.27 внесён патч, который заставляет пакет crypto/x509 отбрасывать любую цепочку, содержащую один из восьми занесённых в чёрный список открытых ключей.

cover.svg

Команда Go подготовила для релизной ветки go1.27 изменение в пакете crypto/x509, которое выводит из доверия несколько промежуточных удостоверяющих центров. Теперь при проверке цепочки сертификатов Go будет отбрасывать её целиком, если в ней встречается хотя бы один «недоверенный» открытый ключ.

Как это устроено

В коде появился словарь distrustedSPKIHashes — набор из восьми значений SHA-256, вычисленных от поля SubjectPublicKeyInfo (SPKI) конкретных сертификатов. Вспомогательная функция containsDistrustedSPKIHash проходит по всем сертификатам цепочки, считает хеш каждого SPKI и сравнивает его с этим списком.

Проверка встроена сразу в три точки верификации. В кроссплатформенном verify.go цепочки с запрещённым ключом помечаются на отбраковку в общем фильтре. На macOS (root_darwin.go) и Windows (root_windows.go), где используется системная проверка, добавлены аналогичные вставки: подозрительные цепочки удаляются, а если после этого не осталось ни одной валидной, возвращается ошибка CertificateInvalidError с кодом NoValidChains.

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

Кого это затрагивает

Сам коммит содержит восемь хешей SPKI. По подсчётам участника обсуждения, который сверил их с данными о корневых центрах с ресурса CCADB, этим восьми ключам соответствуют шестнадцать сертификатов, и все они относятся к одному удостоверяющему центру — eMudhra. Он же опубликовал сопоставленный список.

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


Источник: Lobsters

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.