Тип записи CAA в DNS позволяет владельцам доменов указывать, какие эмитенты сертификатов уполномочены выдавать сертификаты для их домена. Изначально определенный в RFC6844 и позже обновленный в RFC8659, основная концепция остается прежней. Ключевой особенностью записей CAA является флаг "Issuer Critical", предназначенный для того, чтобы эмитенты проверяли запись перед выдачей сертификата.Этот критический флаг был разработан как бит 0 маски битов флагов, что означает, что для его включения следует использовать значение 128. Однако распространенное недопонимание привело к тому, что многие использовали значение 1, интерпретируя бит 7 как критический флаг. Это неверное толкование широко распространено среди пользователей, которые не читали RFC внимательно.Эмитенты сертификатов, такие как Let's Encrypt, столкнулись с дилеммой: строго придерживаться спецификации и отклонять некорректно настроенные записи, или учитывать распространенную ошибку, чтобы сохранить функциональность. Они выбрали последнее, фактически приняв значение 1 как псевдоним для критического флага. Это решение признает практическую реальность пользовательских ошибок в ущерб строгому соблюдению первоначальной спецификации.Представленный фрагмент кода на Go для filterCAA демонстрирует, как это обрабатывается на практике. Он фильтрует по тегам "issue" и "issuewild", а также проверяет наличие неузнанных критических тегов. Примечательно, что код проверяет, установлен ли флаг в 128 (правильное значение) или 1 (часто используемое, неправильное значение), чтобы определить, присутствует ли неузнанный критический тег. Эта инклюзивность обоих значений отражает учет распространенной пользовательской ошибки в отношении критического флага.Автор ставит под сомнение целесообразность использования масок битов для таких флагов, когда это приводит к путанице и ошибкам, предполагая, что более простые механизмы флагов могли бы быть более читаемыми и менее подверженными ошибкам. Признавая полезность масок битов, этот анекдот подчеркивает, как их сложность может привести к значительным операционным проблемам в реальных реализациях. Взаимодействие между техническими спецификациями, пониманием пользователей и практической реализацией является повторяющейся темой.
filterCAAдемонстрирует, как это обрабатывается на практике. Он фильтрует по тегам "issue" и "issuewild", а также проверяет наличие неузнанных критических тегов. Примечательно, что код проверяет, установлен ли флаг в 128 (правильное значение) или 1 (часто используемое, неправильное значение), чтобы определить, присутствует ли неузнанный критический тег. Эта инклюзивность обоих значений отражает учет распространенной пользовательской ошибки в отношении критического флага.Автор ставит под сомнение целесообразность использования масок битов для таких флагов, когда это приводит к путанице и ошибкам, предполагая, что более простые механизмы флагов могли бы быть более читаемыми и менее подверженными ошибкам. Признавая полезность масок битов, этот анекдот подчеркивает, как их сложность может привести к значительным операционным проблемам в реальных реализациях. Взаимодействие между техническими спецификациями, пониманием пользователей и практической реализацией является повторяющейся темой.