Go начнёт отвергать цепочки сертификатов с восемью недоверенными ключами
Команда 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
Комментарии
Войдите, чтобы комментировать.