openjdk.ruOpenJDK на русском

JEP 124: Enhance the Certificate Revocation-Checking API

Улучшение API проверки отзыва сертификатов

ОтветственныйSean Mullan
ТипFeature
ОбластьSE
СтатусClosed / Delivered
Выпуск8
Компонентsecurity-libs / java.security
Обсуждениеsecurity dash dev at openjdk dot java dot net
ТрудоёмкостьM
ДлительностьM
ОдобренBrian Goetz
Создан2011/05/17 20:00
Обновлён2024/05/22 16:56
Задача8046114

Аннотация

Улучшить API проверки отзыва сертификатов: добавить поддержку проверки в режиме best-effort, проверки только сертификата конечного субъекта, а также параметров и настроек, специфичных для конкретного механизма.

Цели

  1. Добавить в API поддержку проверки в режиме best-effort. При такой проверке сертификат не считается недействительным, если не удаётся подключиться к серверу, на котором хранится информация об отзыве.

  2. Добавить в API возможность проверять статус отзыва только сертификата конечного субъекта, а не каждого сертификата в цепочке сертификатов.

  3. Добавить в API поддержку настроек проверки отзыва, которые сейчас задаются системными свойствами. Добавить дополнительные параметры, специфичные для используемого механизма проверки отзыва: CRL или OCSP.

Мотивация

Текущий API java.security.cert считает неудачную попытку связаться с сервером, на котором хранится информация об отзыве, фатальной ошибкой, а во многих средах это слишком строго. Режим best-effort обеспечил бы разумный баланс между безопасностью и удобством использования; кроме того, он поддерживается многими другими реализациями проверки отзыва.

Кроме того, текущий API работает по принципу «всё или ничего»: он требует проверять статус отзыва каждого сертификата в цепочке сертификатов. Проверить статус отзыва только сертификата конечного субъекта он не позволяет.

В текущем API нельзя задать настройки, специфичные для конкретного механизма отзыва, например CRL или OCSP. Сейчас такие настройки либо отсутствуют (например, nonce в OCSP), либо могут задаваться только как свойства безопасности.

Эти улучшения сделают API более полным, гибким и более конкурентоспособным по сравнению с другими реализациями. Многие реализации предоставляют дополнительные настройки проверки отзыва, например проверку в режиме best-effort.

Описание

Ниже кратко перечислены изменения API, внесённые для достижения указанных выше целей.

В классы CertPathValidator и CertPathBuilder добавлен новый метод getRevocationChecker, который возвращает CertPathChecker; с его помощью можно задавать дополнительные настройки и параметры отзыва. Аналогично метод engineGetRevocationChecker добавлен в соответствующие Spi-классы CertPathValidatorSpi и CertPathBuilderSpi.

Добавлен новый класс PKIXRevocationChecker (подкласс PKIXCertPathChecker), с помощью которого можно проверять статус отзыва сертификатов по алгоритму PKIX.

Класс PKIXRevocationChecker содержит методы, позволяющие задавать различные параметры и настройки при запросе статуса отзыва.

Существующая отладочная настройка certpath будет расширена: она будет записывать в журнал важные проблемы для целей отладки (-Djava.security.debug=certpath).

Тестирование

Для проверки новых API будут созданы модульные тесты. Возможно, для имитации подходящей тестовой среды потребуется реализовать серверы OCSP и CRL.

В идеале каждый поставщик должен реализовать набор тестов, который проверяет, что сертификат был отозван, для каждого CA в файле cacerts этого поставщика (поскольку файл cacerts в OpenJDK пуст). Это сведёт к минимуму риск сбоев из-за малозаметных ошибок в реализации или в развёртывании CA. Некоторые CA выпускают тестовые сертификаты для проверки своих сервисов; однако часто такие сертификаты действуют недолго, и поэтому их пришлось бы периодически обновлять.

Влияние

  • Документация: в PKI Programmer's Guide потребуется добавить описание новых API.

  • I18n/L10n: может потребоваться локализация сообщений об ошибках