KeyStoreException: в хранилище ключей не найдено закрытых ключей с not-comm-sons-0.3.11.jar. - PullRequest
0 голосов
/ 29 декабря 2011

В процессе использования клиентских сертификатов для аутентификации я решил использовать not-Пока-commons-ssl-0.3.11.jar . Это привело к другой проблеме - простой акт вызова конструктора для EasySSLProtocolSocketFactory или StrictSSLProtocolSocketFactory приведет к исключению.

Код, выделенный в простом приложении cmd line:

public class CertTest {

public static void main(String[] args) {

    System.setProperty("javax.net.debug", "ssl,handshake"); // SSL DEBUG INFO
    String keystore = "/usr/java/jdk1.6.0_11/jre/lib/security/cacerts";
    String keystorePassword = "changeit";

System.setProperty("javax.net.ssl.keyStore", keystore);
System.setProperty("javax.net.ssl.keyStorePassword", keystorePassword);
//        System.setProperty("javax.net.ssl.trustStore", keystore);
//        System.setProperty("javax.net.ssl.trustStorePassword", keystorePassword);

    try {
        org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory factory = 
            new     org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory();
    }
    catch (Exception e) {
        System.out.println (e);
    }

} }

Чтобы изолировать проблемы со старыми библиотеками, я поместил приведенный выше код в каталог с этими jar-файлами (это ЕДИНСТВЕННЫЕ jar-файлы в classpath):

  1. HttpClient-4.0.1.jar
  2. пока еще не Обще-SSL-0.3.11.jar
  3. Обще-HttpClient-3.1.jar
  4. httpcore-4.0.1.jar

Итак, с некоторыми клиентскими сертификатами в хранилище ключей cacerts я получаю: org.apache.commons.ssl.ProbablyBadPasswordException: Probably bad JKS-Key password: java.security.UnrecoverableKeyException: Password must not be null

Если я использую keytool для удаления всех клиентских сертификатов, которые я загрузил, исключение изменится на

** Причина: java.security.KeyStoreException: закрытые ключи не найдены в хранилище ключей! **
на org.apache.commons.ssl.KeyStoreBuilder.validate (KeyStoreBuilder.java:269)
в org.apache.commons.ssl.KeyStoreBuilder.build (KeyStoreBuilder.java:129)
на org.apache.commons.ssl.KeyMaterial. (KeyMaterial.java:179)
на org.apache.commons.ssl.KeyMaterial. (KeyMaterial.java:170)
atg.apache.commons.ssl.KeyMaterial. (KeyMaterial.java:160)
atg.apache.commons.ssl.KeyMaterial. (KeyMaterial.java:64)
на org.apache.commons.ssl.KeyMaterial. (KeyMaterial.java:114)
atg.apache.commons.ssl.KeyMaterial. (KeyMaterial.java:89)
на org.apache.commons.ssl.SSL. (SSL.java:142)
на org.apache.commons.ssl.SSLClient. (SSLClient.java:59)
в org.apache.commons.ssl.HttpSecureProtocol. (HttpSecureProtocol.java:55)
в org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory. (EasySSLProtocolSocketFactory.java:94)

Фрагменты на выходе:

Хранилище ключей: /usr/java/jdk1.6.0_11/jre/lib/security/cacerts
Тип хранилища ключей: jks
Поставщик хранилища ключей:
хранилище ключей инициализации
init keymanager типа SunX509
trustStore: /usr/java/jdk1.6.0_11/jre/lib/security/cacerts
Тип доверенного хранилища: jks
Поставщик trustStore:
init truststore
добавив в качестве доверенного сертификата:
Тема: CN = SwissSign Platinum CA - G2, O = SwissSign AG, C = CH
Эмитент: CN = SwissSign Platinum CA - G2, O = SwissSign AG, C = CH
Алгоритм: RSA; Серийный номер: 0x4eb200670c035d4f

целая куча доверенных сертификатов по умолчанию отсечена здесь ...
вызвать посев SecureRandom
готовый посев SecureRandom
@@@@@@@@@@ ИСКЛЮЧЕНИЕ
java.security.KeyStoreException: закрытые ключи не найдены в хранилище ключей!

Есть идеи?

1 Ответ

1 голос
/ 01 января 2012

java.security.KeyStoreException: закрытые ключи не найдены в хранилище ключей!

Это исключение особенно жалуется на то, что в хранилище ключей, которое вы пытаетесь загрузить, нет закрытых ключей.
В случае cacerts, который является доверенным хранилищем Java по умолчанию, это верно!

Но с кодом, который вы опубликовали (то есть вы на самом деле не опубликовали код), или с тем фактом, что вы ничего не говорите о хранилище ключей, которое вы пытаетесь загрузить, невозможно помочь вам в этом.

...