6.3.3. Обработка СОС
Алгоритм обработки начинается с предположения, что сертификат не является аннулированным. Алгоритм проверяет один или несколько СОС до тех пор, пока, либо не будет определён состояние сертификата, подлежащего аннулированию, либо будет проверено достаточное число СОС с целью выявления всех кодов причин отзыва.
Для каждой точки распространения, указанной в субполе «cRLDistributionPoints» сертификата, для каждого соответствующего СОС, хранящегося в локальной кэш-памяти для СОС, несмотря на то, что переменная «reasons_mask» не содержит значение «all-reasons», а переменная «cert_status» — «UNREVOKED», проводим следующие операции:
Обновляем данные в локальной кэш-памяти для СОС за счёт получения заполняемого СОС, усечённого СОС или их обоих, если конечно это потребуется:
Если текущее время больше времени, указанного в субполе «nextUpdate» СОС, то выполняем одну из двух следующих операций:
Если значение «use-deltas» установлено, а сертификат или СОС содержат субполе «freshestCRL», то получаем усечённый СОС со следующим значением в субполе «nextUpdate», которое позднее текущего времени, и может использоваться для обновления данных в локальной кэш-памяти для СОС (5.2.4).
Добавляем заполняемый СОС к данным в локальной кэш-памяти для СОС, проверяем, что текущее время более раннее, чем значение в субполе «nextUpdate» нового СОС, и продолжаем обработку с использование нового СОС. Если значение «use-deltas» установлено, а сертификат или СОС содержат субполе «freshestCRL», то получаем текущий усечённый СОС, который может использоваться для обновления нового заполняемого СОС, хранящегося в локальной кэш-памяти для СОС (5.2.4).
Если текущее время больше значения в субполе «nextUpdate», значение «use-deltas» установлено, а сертификат или СОС содержат субполе «freshestCRL», то получаем текущий усечённый СОС, который может использоваться для обновления заполняемого СОС, хранящегося в локальной кэш-памяти для СОС (5.2.4).
Проверяем издателя и область применения заполняемого СОС следующим образом:
Если точка распространения включает субпоследовательность «cRLIssuer», то проверяем, что поле «Issuer» в заполняемом СОС совпадает с субпоследовательностью «cRLIssuer» в точке распространения, и что заполняемый СОС содержит последовательность «issuingDistributionPoint», которая, в свою очередь, включает субпоследовательность «indirectCRL» (содержит логический тип данных, «boolean»). В противном случае, проверяем, что издатель СОС совпадает с издателем сертификата.
Если заполняемый СОС включает последовательность «issuingDistributionPoint» субполя «crlExtensions», то проверяем:
Если в последовательности «issuingDistributionPoint» субполя «crlExtensions» представлена субпоследовательность «DistributionPointName», а в последовательности «DistributionPoint» представлена субпоследовательность «Distribution», то проверяем, что одно из наименований в последовательности «issuingDistributionPoint» совпадает с одним из наименований в последовательности «DistributionPoint». Если в последовательности «issuingDistributionPoint» субполя «crlExtensions» представлена субпоследовательность «DistributionPointName», а в последовательности «DistributionPoint» не представлена субпоследовательность «Distribution», то проверяем, что одно из наименований в последовательности «issuingDistributionPoint» совпадает с одним из наименований в субпоследовательности «cRLIssuer» последовательности «DistributionPoint».
Если в последовательности «issuingDistributionPoint» субполя «crlExtensions» представлена субпоследовательность «onlyContainsUserCerts» (содержит логический тип данных, «boolean»), то проверяем, что в субполе «basicConstraints» поля «Расширения» сертификата не установлен флаг «cA».
Если в последовательности «issuingDistributionPoint» субполя «crlExtensions» представлена субпоследовательность «onlyContainsCACerts» (содержит логический тип данных, «boolean»), то проверяем, что в субполе «basicConstraints» поля «Расширения» сертификата установлен флаг «cA».
Проверяем, что субпоследовательность «onlyContainsAttributeCerts» (содержит логический тип данных, «boolean») не представлена.
Если значение «use-deltas» установлено, то проверяем издателя и область применения усечённого СОС следующим образом:
Проверяем, что издатель усечённого СОС совпадает с издателем заполняемого СОС.
Если заполняемый СОС включает последовательность «issuingDistributionPoint» в субполе «crlExtensions», то проверяем, что усечённый СОС содержит аналогичную (полностью совпадающую) последовательность «issuingDistributionPoint» в субполе «crlExtensions». Если же заполняемый СОС не включает последовательность «issuingDistributionPoint» в субполе «crlExtensions», то проверяем, что и усечённый СОС также не содержит последовательность «issuingDistributionPoint» в субполе «crlExtensions».
Проверяем, что последовательность «authorityKeyIdentifier» усечённого СОС совпадает с последовательностью «authorityKeyIdentifier» заполняемого СОС.