Проблема при извлечении ключа из сертификата

Мы пытаемся установить новый сертификат, выданный правительством, но он не работает.

Код работает на сервере Java EE, который считывает сертификат и извлекает открытый ключ.

//ks is Keystore
ks.load(new FileInputStream("/tmp/cert.pfx"), "password".toCharArray());

С загрузкой сертификата все в порядке. Если мы посмотрим на ks.size(), он вернет 1.

Если мы перечислим псевдонимы, мы также сможем увидеть значение псевдонима.

Enumeration<?> en = ks.aliases();
String alias = (String)en.nextElement();

Однако, если мы извлечем сертификат с использованием псевдонима, мы получим обратно ноль.

X509Certificate x509cert = ((X509Certificate)ks.getCertificate(alias));

x509cert на данный момент равен нулю.

Еще несколько моментов:

  • Это сертификат государственного образца. Если мы изменим псевдоним на значение открытого текста с помощью openssl, он будет работать нормально. Исходное значение - GUID.

  • Если мы проведем тестирование с помощью тестовой программы на локальном ПК с использованием Java SE, исходный сертификат работает - мы можем извлечь открытый ключ из сертификата, используя псевдоним.

  • Прошлые сертификаты работали нормально. Мы перешли на новый сертификат только потому, что срок действия старого сертификата истек.

Новый сертификат не работает только в среде Java EE. Поэтому я рассматриваю это как комбинацию чего-то в сертификате и среды, в которой он работает.

Есть идеи, что может быть не так, или способ решить эту проблему?

Непечатаемый символ в псевдониме?

user207421 04.07.2018 03:20

Установите флажок эта статья, чтобы правильно сгенерировать ключ сертификата.

Khaled Lela 04.07.2018 03:29

@KhaledLela Очевидно, он использовал OpenSSL, а не keytool; и не используйте форматирование кода для текста, не являющегося кодом.

user207421 04.07.2018 04:50

NB ks.load() загружает все хранилище ключей, включая все сертификаты и закрытые ключи, если они есть, а не только открытый ключ.

user207421 04.07.2018 04:52

иногда некоторые p12 плохо читаются. Я предлагаю вам создать новое хранилище ключей, экспортировать и импортировать сертификат с помощью OpenSSL или KeystoreExplorer. Если не работает, попробуйте использовать Bouncycastle и указав здесь провайдера KeyStore keyStore = KeyStore.getInstance("PKCS12", "BC");

pedrofb 04.07.2018 08:07

Спасибо всем за отзывы. В псевдониме было несколько непечатаемых символов. Мы снова использовали openssl для сборки сертификата, и он сработал.

Vikas 31.10.2018 18:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
105
0

Другие вопросы по теме