it-swarm.com.ru

java.lang.Exception: открытые ключи в ответе и хранилище ключей не совпадают

Я должен получить доступ к веб-сервису, расположенному на порту 443. Поставщик услуг поделился с нами тремя сертификатами.

  1. ABCD.cer
  2. CA_Certificate.cer
  3. CCA_Certificate.cer

Я должен добавить их в хранилище ключей, создав цепочку форм для связи SSL. Я выполнил следующие шаги.

  1. keytool -keystore npci_keystore_test.jks -genkey -alias npci_client_testore 

       Result :- keystore npci_keystore_test.jks created.
    
  2. keytool -import -keystore npci_keystore_test.jks -file CA_Certificate.cer -alias theCARoot

       Result :- certificate CA_Certificate.cer is added to keystore.
    
  3. keytool -import -keystore npci_keystore_test.jks -file CCA_Certificate.cer -alias theCCARoot

       Result :- certificate CCA_Certificate.cer is added to keystore.
    
  4. keytool -import -keystore npci_keystore_test.jks -file ABCD.cer -alias npci_client_testore

    На шаге 4 у меня есть ниже исключения

    Введите пароль хранилища ключей: (и когда я ввожу пароль, у меня есть исключение ниже)

    keytool error: Java.lang.Exception: открытые ключи в ответе и хранилище ключей не совпадают

Я уже сделал поиск в SO, но пока не повезло.

Я следую ниже источника, чтобы создать хранилище и импортировать сертификат в нем . JKS Keystore

Правка:---

Я проверил это, изменив порядок импорта сертификатов, но пока не повезло.

10
RE350

Ссылка в вашем вопросе объясняет, как создать хранилище ключей SSL для сервера, а это не то, что вы хотите сделать. То, что вы сделали, было:

  1. Создать новую пару ключей
  2. Добавить доверенный сертификат в хранилище ключей
  3. Добавьте еще один доверенный сертификат в хранилище ключей
  4. Попробуйте импортировать SSL-сертификат сервера в качестве сертификата для вашей пары ключей.

Шаг 4 не выполняется, поскольку сертификат SSL был создан для совершенно другой пары ключей.

Три сертификата, вероятно: 

  1. SSL-сертификат веб-сервиса
  2. Сертификат CA, подписавший сертификат SSL
  3. Корневой сертификат, подписавший ЦС

Теперь вам нужно добавить доверенную привязку в хранилище доверенных сертификатов (по умолчанию: ${Java_HOME}/jre/lib/security/cacerts), в результате чего ваш клиент примет SSL-сертификат веб-службы. 

Обычно сервер SSL отправляет всю цепочку, за исключением корневого сертификата, клиенту во время рукопожатия SSL. Это означает, что вы должны добавить корневой сертификат в ваше хранилище доверенных сертификатов:

keytool -import -keystore ${Java_HOME}/jre/lib/security/cacerts -file CCA_Certificate.cer -alias theCCARoot

Дополнительные шаги необходимы, если веб-сервис требует аутентификации клиента SSL, но вы никогда не упоминали аутентификацию клиента, поэтому я предполагаю, что в этом нет необходимости. 

14
Omikron

Здесь возникает проблема с псевдонимом, который вы использовали при импорте сертификата, который похож на тот, который вы использовали при создании хранилища JKS. Просто измените псевдоним, и он решит вашу проблему. Исходный документ [1] необходимо соответствующим образом исправить.

[1] http://docs.Oracle.com/cd/E19509-01/820-3503/ggfgo/index.html

26
Ravindra Ranwala

В точке 4 (где вы получаете ошибку: ошибка keytool: Java.lang.Exception: открытые ключи в ответе и хранилище ключей не совпадают ), где вы импортируете сертификат, пожалуйста, измените псевдоним. Псевдоним не должен быть npci_client_testore, так как он уже используется для псевдонима хранилища ключей.

4
Rishi Raj Tandon

В моем случае «Корневой сертификат, подписавший ЦС» отсутствовал в цепочке. Проверьте, есть ли у вас соответствующий сертификат ROOT CA, в противном случае экспортируйте его из Intermediate и импортируйте в хранилище ключей. импортировав Root CA в мое хранилище ключей, работал для меня.

3
azhar buttar

это сработало для меня

keytool -keystore yourkeystorename -importcert -alias certificatealiasname -file certificatename.cer

0
guest98

У меня была такая же ошибка исключения (хранилище ключей не совпадает) хостинг с Tomcat8. Если вы ввели wrong domain name или no domain name при создании хранилища ключей, вам потребуется заново создать файл Keystore и повторно отправить CSR в ваш Центр сертификации (CA), имеющий лицензию/признанный/утвержденный для выдачи сертификатов цифровой подписи (Godaddy в моем дело). 

Вот команды для создания файла хранилища ключей: 

keytool -keysize 2048 -genkey -alias Tomcat -keyalg RSA -keystore Tomcat.keystore
keytool -importkeystore -srckeystore Tomcat.keystore -destkeystore Tomcat.keystore -deststoretype pkcs12

(Вам необходимо ввести имя домена, когда в приглашении запрашивается имя и фамилия, он запрашивает полное доменное имя (FDQN), например, www.example.com). Из города, штата и провинции - do not abbreviate

Введите следующую команду, чтобы создать CSR (из той же директории, где находится ваше хранилище Tomcat.keystore): 

keytool -certreq -keyalg RSA -alias Tomcat -file myFQDN.csr -keystore Tomcat.keystore

Примечание: из-за моей предыдущей ошибки мне пришлось удалить все сертификаты Godaddy из моей консоли Windows ( MMC ). 

Как только ваши файлы сертификатов будут готовы от вашего центра сертификации. Загрузите файлы и дважды щелкните каждый из 2 файлов .crt, чтобы переустановить их снова в Windows (выберите «Автоматическая установка на локальном компьютере»). Убедитесь, что вы создали резервную копию файла Tomcat.keystore, а затем импортировали эти файлы сертификатов В ПОРЯДКЕ в файл Tomcat.keystore (с нуля) в том же порядке, что и в следующем примере:

keytool -import -alias root -keystore Tomcat.keystore -trustcacerts -file gdig2.crt.pem
keytool -import -alias intermed -keystore Tomcat.keystore -trustcacerts -file Gd_bundle-g2-g1.crt
keytool -import -alias Tomcat -keystore Tomcat.keystore -trustcacerts -file namewithnumbersandletters.crt

Убедитесь, что вы обновили файл server.xml, а затем перезапустите Tomcat. 

<Connector port="8080" protocol="HTTP/1.1"
            connectionTimeout="20000"
            redirectPort="443" />  
    <Connector 
    URIEncoding="UTF-8"
    SSLEnabled="true" 
    clientAuth="false"
    keystoreFile="C:\Program Files\Java\jdk1.8.0_181\bin\Tomcat.keystore" 
    keystorePass="changeme" 
    maxThreads="200" 
    port="443" 
    scheme="https" 
    secure="true" 
    sslProtocol="TLS" />

Вуаля! Значок блокировки (Безопасное соединение) появляется при просмотре домена. 

0
QA Specialist