Я создал новое хранилище ключей 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?
В основном, что вам нужно сделать, чтобы сделать ECC доступным на Java 6, добавить дополнительный провайдер, поддерживающий ECC. Без оплаты денег у вас есть два варианта:
Для варианта 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.