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

JEP 229: Create PKCS12 Keystores by Default

Создание хранилищ ключей PKCS12 по умолчанию

ОтветственныйVincent Ryan
ТипFeature
ОбластьSE
СтатусClosed / Delivered
Выпуск9
Компонентsecurity-libs / java.security
Обсуждениеsecurity dash dev at openjdk dot java dot net
ТрудоёмкостьM
ДлительностьM
РецензентыBrian Goetz, Sean Mullan
ОдобренBrian Goetz
Создан2014/05/30 16:28
Обновлён2018/01/11 15:34
Задача8044445

Аннотация

Сменить тип хранилища ключей по умолчанию с JKS на PKCS12.

Цели

  • Повысить безопасность. PKCS12 предлагает более стойкие криптографические алгоритмы, чем JKS.

  • Сохранить прямую и обратную совместимость. Приложения, работающие с хранилищами ключей JKS и PKCS12, должны продолжать работать в разных выпусках JDK.

Мотивация

JKS — собственный тип хранилища ключей, специфичный для JDK. Он является типом хранилища ключей по умолчанию для платформы Java начиная с JDK 1.2. Хранилища ключей JKS могут хранить только закрытые ключи и доверенные сертификаты открытых ключей и основаны на проприетарном формате, который непросто расширить для новых криптографических алгоритмов.

PKCS12 — расширяемый, стандартный и широко поддерживаемый формат для хранения криптографических ключей. Начиная с JDK 8 хранилища ключей PKCS12 могут хранить закрытые ключи, доверенные сертификаты открытых ключей и секретные ключи. Переход на PKCS12 повышает целостность и конфиденциальность хранилища ключей. Он также открывает возможности для взаимодействия с другими системами, которые тоже поддерживают PKCS12.

Описание

Эта возможность меняет тип хранилища ключей по умолчанию с JKS на PKCS12. По умолчанию новые хранилища ключей будут создаваться в формате PKCS12. Существующие хранилища ключей не изменятся, а приложения, работающие с хранилищами ключей, по-прежнему могут явно указывать нужный им тип хранилища.

Работа существующих приложений не должна нарушиться. Хранилища ключей, как правило, используются долго, поэтому нам нужно поддерживать доступ к ним в нескольких выпусках JDK. Приложения, работающие с хранилищами ключей, созданными в более ранних выпусках JDK, должны без изменений работать на JDK 9. Аналогично приложения, работающие с хранилищами ключей, созданными в JDK 9, должны без изменений работать в более ранних выпусках JDK.

Это требование выполняется за счёт механизма определения типа хранилища ключей, который понимает оба формата: JKS и PKCS12. Перед загрузкой хранилища ключей его формат анализируется, чтобы определить тип, а затем для доступа к нему используется подходящая реализация хранилища ключей. Механизм включён по умолчанию, но при необходимости его можно отключить.

Поддержка этого механизма определения типа хранилища ключей может быть перенесена в более ранние выпуски JDK.

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

Требуется обширное тестирование в разных выпусках JDK, чтобы убедиться, что совместимость для приложений, работающих с хранилищами ключей, сохраняется.