Назад | Перейти на главную страницу

Хранилище ключей Java: как правильно импортировать сертификаты CA?

Мы обновили сертификат одного из наших серверов (apache httpd). Для интерфейса веб-сервиса (для мобильных клиентов) нам также нужен сертификат на tomcat, это означает: хранится в хранилище ключей java. У нас уже есть наш сертификат в хранилище ключей java, но корневые сертификаты все еще отсутствуют.

Если мы перечислим детали старого сертификата хранилища ключей, мы получим:

/> keytool -list -v -keystore 2012.jks -alias ourcertificate
Keystore-Kennwort eingeben:  
Aliasname: ourcertificate
...
...
...
Zertifikatkettenlänge: 3  // certificate length: 3
Zertifikat[1]:            // certificate[1]
...
...
...
Zertifikat[2]:
...
...
...
Zertifikat[3]:
...
...
...

Здесь важно то, что все сертификаты CA уже являются частью псевдонима "ourcertificate" хранилища ключей.

Если мы перечислим детали нового сертификата (нового файла хранилища ключей), мы получим:

/> keytool -list -v -keystore 2015.jks -alias ourcertificate
Keystore-Kennwort eingeben:  
Aliasname: ourcertificate
...
...
...
Zertifikatkettenlänge: 1   // certificate length: 1
Zertifikat[1]:             // certificate[1]
...
...
...

Сертификаты CA здесь отсутствуют. Чтобы импортировать сертификаты CA, мы пытаемся выполнить следующую команду:

/> keytool -import -alias alpha -file gsalphasha2g2r1.der -keystore 2015.jks
Keystore-Kennwort eingeben:  
...
... 
...
Diesem Zertifikat vertrauen? [Nein]:  Ja    // trust this certificate? [No]: Yes
Zertifikat wurde Keystore hinzugefügt       // certificate successfully added to keystroe

Но при этом в хранилище ключей добавляется новый доверенный сертификат (с новым псевдонимом). Также не помогает добавление root ca certifiacte. Если мы перечислим детали сертификата в записи «ourcertificate», мы все равно получим длину сертификата 1. Также указание «ourcertificate» при импорте сертификатов CA не помогает (тогда мы получаем ошибку, что открытые ключи в ответе и хранилище ключей являются не идентично; "Keytool-Fehler: java.lang.Exception: Public Keys in Antwort und Keystoretimmen nicht überein" на немецком языке)

В чем дело? Как мы можем импортировать сертификаты CA в хранилище ключей Java, чтобы сертификаты CA были связаны с «нашим сертификатом»

РЕДАКТИРОВАТЬ

Думаю, я должен также описать, как мы импортировали пару закрытого ключа и сертификата. Это немного сложно, потому что CSR был сделан с помощью openssl. Нам нужно было импортировать закрытый ключ и сертификат в файл хранилища ключей. Для этого мы использовали следующий файл класса Java: http://www.agentbob.info/agentbob/79-AB.html (класс ImportKey). Мы знаем, что это работает. Но может быть, при импорте ключа и сертификата произошла ошибка ...