2014-12-28 12 views
1

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

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

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

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

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

Есть ли вообще использовать JKS с Java 1.6?

+0

FYI, stackoverflow ethiquette - не изменять ответ на вопрос. Вместо этого, примите ответ @ omikron или опубликуйте свое разрешение как отдельный ответ. – Brian

ответ

4

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

  1. Солнце PKCS # 11 поставщика
  2. Bouncy Castle поставщик

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

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

Для установки провайдера следуйте этим инструкциям: Provider Installation. Возможно, необходимо добавить поставщика 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? –

+0

Поскольку сочетание Java 6 и ECC часто вызывает проблемы. Я ничего не имею против ECC вообще. – Omikron

Смежные вопросы