Протоколы безопасного сетевого взаимодействия

       

Обработка CRL


Данный алгоритм начинается с предположения, что сертификат не отменен. Алгоритм проверяет один или более CRL до тех пор, пока либо статус сертификата не будет определен как отмененный, либо будет проверено достаточное количество CRLs, охватывающих все коды причин.

Для каждой точки распространения (DP) в расширении сертификата точек распространения CRL, для каждого соответствующего CRL в локальном кэше CRL пока ((reasons_mask не all-reasons) и (cert_status есть UNREVOKED)) выполнить следующее:

  1. Изменить локальный кэш CRL получением полного CRL, дельта CRL или обоих, как определено локальной политикой:
    1. Если текущее время больше значения поля CRL next update, выполнить следующие действия:
      1. Если use-deltas установлен и либо сертификат, либо CRL содержат расширение freshest CRL, получить дельта CRL со значением next update, которое больше текущего времени.
      2. Изменить локальный кэш CRL текущим полным CRL, убедиться, что текущее время – меньше значения next update в новом CRL, и продолжить обработку с новым CRL.
    2. Если текущее время меньше значения поля next update и use-deltas установлен, получить текущий дельта CRL, который может быть использован для изменения локального кэшированного полного CRL.
  2. Проверить выпускающего и область полного CRL следующим образом:
    1. Если DP включает cRLIssuer, убедиться, что поле выпускающего в полном CRL соответствует cRLIssuer в DP, и что полный CRL содержит расширение, описывающее точки распространения выпускающего с установленным булевским значением indrectCRL. В противном случае убедиться, что выпускающий CRL соответствует выпускающему сертификат.
    2. Если полный CRL включает расширение CRL, описывающее точки распространения выпускающего (IDP), проверить следующее:
      1. Если присутствует имя точки распространения в расширении CRL IDP и присутствует поле распространения в DP, убедиться, что одно из имен в IDP соответствует одному из имен в DP. Если имя точки распространения представлено в расширении CRL IDP и поле распространения опущено в DP, убедиться, что одно из имен в IDP соответствует одному из имен в поле cRLIssuer DP.
      2. Если булевское onlyContainsUserCerts установлено в расширении CRL IDP, проверить, что сертификат не включает расширение базовых ограничений с установленным булевским сА.
      3. Если булевское onlyContainsCACerts установлено в расширении CRL IDP, проверить, включает ли сертификат расширение базовых ограничений с установленным булевским сА.
      4. Убедиться, что булевское onlyContainsAttributeCerts не установлено.
  3. Если установлен use-deltas, проверить выпускающего и область дельта CRL следующим образом:
    1. Проверить, соответствует ли выпускающий дельта CRL выпускающему полного CRL.
    2. Если полный CRL включает расширение CRL выпускающей точки распространения (IDP), убедиться, что дельта CRL содержит соответствующее расширение CRL IDP.


      Если в полном CRL расширение CRL IDP опущено, убедиться, что в дельта CRL также опущено расширение CRL IDP.
    3. Убедиться, что расширение идентификатора ключа уполномоченного органа дельта CRL соответствует расширению идентификатора ключа уполномоченного органа полного CRL.
  4. Вычислить interim_reasons_mask для данного CRL следующим образом:
    1. Если расширение CRL выпускающей точки распространения (IDP) присутствует, включает onlySomeReasons и DP включает reasons, то установить interim_reasons_mask в пересечение reasons в DP и onlySomeReasons в расширении CRL IDP.
    2. Если расширение CRL IDP включает бит onlySomeReasons, но в DP опущены reasons, то установить interim_reasons_mask в значение onlySomeReasons в расширении CRL IDP.
    3. Если расширение CRL IDP не присутствует или опущено onlySomeReasons, но DP включает reasons, то установить interim_reasons_mask в значение DP reasons.
    4. Если расширение CRL IDP не присутствует или опущено onlySomeReasons и в DP опущены reasons, то установить interim_reasons_mask в специальное значение all-reasons.
  5. Убедиться, что interim_reasons_mask включает одну или более reasons, которые не включены в reasons_mask.
  6. Получить и проверить действительность сертификационного пути для выпускающего полный CRL. Если расширение использования ключа в сертификате выпускающего CRL присутствует, проверить, установлен ли бит cRLSign.
  7. Проверить действительность подписи в полном CRL, используя открытый ключ, действительность которого проверена на шаге (6).
  8. Если use-deltas установлен, проверить действительность подписи для дельта CRL, используя открытый ключ, действительность которого проверена на шаге (6).
  9. Если use-deltas установлен, выполнить поиск для сертификата в дельта CRL. Если найдена запись, которая соответствует выпускающему сертификат и серийному номеру, как описано выше, установить переменную cert_status в значение, соответствующее указанной причине, следующим образом:
    1. Если расширение записи CRL кода причины присутствует, установить переменную cert_status в значение расширения записи CRL кода причины.
    2. Если расширение записи CRL кода причины не присутствует, установить переменную cert_status в значение unspecified.
  10. Если cert_status есть UNREVOKED, то выполнить поиск для сертификата в полном CRL.Если найдена запись, соответствующая выпускающему сертификат и серийному номеру, установить переменную cert_status в указанную причину, как описано в шаге (9).
  11. Если (cert_status есть removeFromCRL), то установить sert_status в UNREVOKED.


Если reasons_mask есть all-resons или cert_status не UNREVOKED, то статус отмены определен, так как возвращается cert_status.

Если статус сертификата не определен, повторить описанный выше процесс с любыми доступными CRLs, не указанными в точке распространения, но созданными выпускающим сертификат. Для обработки таких CRL предполагается DP с обеими причинами, и опущенные поля cRLIssuer, и имя точки распространения выпускающего сертификат. Это означает, что последовательность имен в fullName создается из поля выпускающего сертификат, а также расширения issuerAltName сертификата. Если статус отмены остается неопределенным, то возвращается cert_status UNDETERMINED.


Содержание раздела