Как загрузить сертификаты следующего поколения из хранилища ключей Microsoft с помощью Java 8?

Я пытаюсь загрузить сертификаты непосредственно из магазина Microsoft, чтобы избежать необходимости экспортировать сертификаты из хранилища MS и затем импортировать их в хранилище JKS.

Мне удалось получить сертификаты, созданные из типичного шаблона веб-сервера AD CS, используя устаревшую криптографию непосредственно из хранилищ MS с использованием SunMSCAPI.

Однако SunMSCAPI не поддерживает современные шифры CNG, которые я использую, в частности, асимметричное шифрование RSA-2048, хеширование SHA-384 и цифровую подпись ECDSA-384.

Можно ли загружать сертификаты следующего поколения из хранилищ MS с помощью Java? Я нахожусь на jdk1.8.0_45. Существует ли альтернатива SunScAPI, предоставляющая доступ к JCE поставщику JCE, которая может обрабатывать CNG? Я подозреваю, что ему придется использовать JNI или JNA для доступа к собственному API CNG для Windows.

Я пробовал Pheox JCAPI без успеха. Он поддерживает RSA и DSA, но не ECDSA. Я не пробовал Bouncy Castle, но я понимаю, что он не предлагает такую ​​возможность.

Есть ли другие готовые альтернативы поставщика JCE для SunMSCAPI, которые могут обрабатывать CNG, я мог бы попробовать?

Обновление: JCAPI v2 поддерживает только поддержку RSA, ECDH, запланированную на v3 в следующем году.

Обновление: некоторые из них предположили, что установка Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files для Java 8 может решить это, но Нет, это не помогает, поскольку проблема заключается в том, что SunMSCAPI поддерживает только шифры RSA, как можно видеть, глядя на исходный код.

Ответы

Ответ 1

Как уже упоминалось, это еще не возможно с SunMSCAPI. На самом деле есть запрос расширения, который можно проголосовать за исправление проблемы.

Проблема здесь: https://bugs.openjdk.java.net/browse/JDK-8026953

Ответ 2

спецификация утверждает

Из-за правил импорта в некоторых странах реализация Oracle предоставляет файл политики криптографической юрисдикции по умолчанию, который ограничивает силу криптографических алгоритмов.

Если требуются более строгие алгоритмы (например, AES с 256-битными ключами), файлы Jur Unlimited Strength Jurisdiction Policy должны быть получены и установлены в JDK/JRE.

Пользователь несет ответственность за проверку того, что это действие допустимо в соответствии с местными правилами.

Загрузите JCE Unlimited Strength Jurisdiction Policy Files и поместите его в свою папку безопасности jre.