Как использовать закрытый ключ ECC с Java 1.6?

1

Я создал новое хранилище ключей JKS, которое содержит trustedCertEntry и PrivateKeyEntry. Оба созданы с использованием ECC (имя алгоритма подписи: SHA384withECDSA). Импорт может осуществляться только с помощью Java 1.7 keytool, который поддерживает ECC. Во время выполнения я использую java 1.6, который не поддерживает ECC.

В моем коде я определил:

System.setProperty("javax.net.ssl.keyStore", "c:\mykey.ks");
System.setProperty("javax.net.ssl.keyStorePassword","abcde");

В настоящее время я получаю:

org.apache.axis2.AxisFault: невозможно декодировать данные base64: null

Нужно ли использовать JKS с Java 1.6?

  • 0
    К вашему сведению, этикет stackoverflow заключается в том, чтобы не редактировать ответ на вопрос. Вместо этого примите ответ @omikron's omikron или опубликуйте свое решение как отдельный ответ.
Теги:
ssl
certificate
keystore
jks

1 ответ

4
Лучший ответ

В основном, что вам нужно сделать, чтобы сделать ECC доступным на Java 6, добавить дополнительный провайдер, поддерживающий ECC. Без оплаты денег у вас есть два варианта:

  1. Поставщик Sun PKCS # 11
  2. Поставщик Bouncy Castle

Для варианта 1 вам понадобится родная библиотека PKCS # 11, которую я предполагаю, что у вас ее нет. И вариант 2, вероятно, лучший выбор в любом случае, потому что PKCS # 11 фактически предназначен для ключей в смарт-картах или HSM. Но только для записи, если кто-то хочет пойти таким путем, вот описание того, как это сделать (часть NSS не имеет значения): как экспортировать ключ ECC и сертификат из базы данных NSS и импортировать в хранилище ключей JKS и Oracle Wallet

Вариант 2 требует, чтобы хранилище ключей было одного из типов, которые предоставляются замком Bouncy (либо BKS, либо UBER), и для этого необходимо установить провайдера Bouncy Castle.

Для установки поставщика выполните следующие инструкции: Установка поставщика. Возможно, необходимо добавить поставщика BC до стандартного поставщика SSL (com.sun.net.ssl.internal.ssl.Provider), но я не уверен в этом.

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

  • -storetype BKS вместо -storetype JKS
  • -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider

Кроме того, вы можете использовать KeyStore Explorer для преобразования хранилища ключей из JKS в BKS (если вы используете KSE с Java 7).

Чтобы использовать хранилище ключей BKS для SSL, вам необходимо добавить еще одно системное свойство:

System.setProperty("javax.net.ssl.keyStoreType", "BKS");

Это должно быть так, но, честно говоря, я бы рекомендовал либо переключиться на Java 7, либо на ключи RSA.

  • 0
    Спасибо за быстрый и подробный ответ!
  • 0
    Почему вы бы порекомендовали использовать RSA?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню