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, проверки только сертификата конечного субъекта, а также параметров и настроек, специфичных для конкретного механизма.
Цели
-
Добавить в API поддержку проверки в режиме best-effort. При такой проверке сертификат не считается недействительным, если не удаётся подключиться к серверу, на котором хранится информация об отзыве.
-
Добавить в API возможность проверять статус отзыва только сертификата конечного субъекта, а не каждого сертификата в цепочке сертификатов.
-
Добавить в 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: может потребоваться локализация сообщений об ошибках