Websphere keyset не получает последний ключ - PullRequest
0 голосов
/ 20 сентября 2018

У меня проблема с набором ключей Websphere.Я создаю хранилище ключей, используя открытый ключ, который был сгенерирован на другом компьютере с помощью keytool, с помощью этой команды:

keytool -import -noprompt -alias eeccstore -keystore eeccstore.jks -file D:\Keys\eecc_public.key -storepass password

После этого в Websphere Server я создаю хранилище ключей следующим образом:

Использование хранилища ключей: хранилища ключей набора ключей

Создание хранилища ключей в Websphere Server

Я использую тот же пароль, который использую для создания хранилища ключей с помощью Keytool.

Затем я создаю набор ключей в WebSphere Server следующим образом:

Создание набора ключей в Websphere Server

В своем коде Java я использую набор ключей следующим образом:

KeySetHelper ksh = KeySetHelper.getInstance();
KeyPair key = (KeyPair)ksh.getLatestKeyForKeySet("eeccKeySet");

И консоль показывает мне это:

java.lang.NullPointerException
com.ibm.ws.crypto.config.WSKeySet.getLatestKey(WSKeySet.java:257)
com.ibm.websphere.crypto.KeySetHelper.getLatestKeyForKeySet

Я понимаю, что сервер не может найти ключ в наборе ключей, но я не знаю, что я мог бы сделатьнеправильно.

Заранее благодарим за поддержку.

Реггард!

1 Ответ

0 голосов
/ 06 февраля 2019

После нескольких дней поиска я нашел решение.Вместо этого я получаю доступ к KeyStore напрямую и получаю не ключ, а сертификат X509, который может создать открытый ключ и использовать его для шифрования любого текста.

    char [] passch = password.toCharArray();

    com.ibm.crypto.provider.JavaKeyStore keystore = new JavaKeyStore();

    keystore.engineLoad(new FileInputStream(new File(pathKeyFileJKS)), null);
    KeyStore.TrustedCertificateEntry privKeyEntry =  (TrustedCertificateEntry) 
    keystore.engineGetEntry("eecc-KeyStore", new KeyStore.PasswordProtection(passch)); 

    X509CertImpl cert = (X509CertImpl) privKeyEntry.getTrustedCertificate();

    cert.checkValidity();

    PublicKey publicKey  = cert.getPublicKey();

Где парольПеременная содержит пароль, который я использую для создания файла eecc_public.key, pathKeyFileJKS содержит путь, по которому создается файл jks, а "eecc-KeyStore" - это имя, которое яиспользовать для создания моего хранилища ключей в WebSphere Server.

...