У Java/JDK/JRE есть хранилища ключей в папке lib\Security, как показано ниже

В комплект поставки Java входит около 93 сертификатов. Они не являются самозаверяющими и поставляются самой Java.

Эти сертификаты являются сертификатами SHA1

Фон

Приложение, которое мы используем, зависит от Java и нашей компании, которые говорят, что они уходят от SHA1 и хотят изменить эти SHA1 на SHA2.

Вопросы

  1. Есть ли версия / тип Java, который использует SHA2 для стандартных сертификатов?
  2. Можно ли заменить сертификаты из коробки на SHA2?

2 ответа2

1

Это поздний ответ, но в этом вопросе есть важное заблуждение, которое следует прояснить будущим читателям. Вывод Keytool может вводить в заблуждение: он показывает отпечаток SHA1 для всех сертификатов, независимо от того, используют ли они хэш-функцию подписи SHA1 или SHA2 (именно это вы и искали). Отпечаток SHA1 - это просто уникальный идентификатор сертификата.

Чтобы найти сертификаты SHA2 в пакете, вы не можете полагаться на keytool -list. Вам нужно извлечь все сертификаты с помощью keytool -exportcert, а затем проверить детали каждого из них с помощью keytool -printcert: сертификаты SHA2 будут иметь следующую строку в выходных данных:

Signature algorithm name: SHA256withRSA

Сертификаты SHA2 CA были частью стандартного пакета Java cacerts начиная с JRE 1.6.14 (см. Сертификат ttelesecglobalrootclass3ca), если не раньше.

0

Когда поставщики CA обновляют свои сертификаты до SHA-2, они представляют новые сертификаты для включения в различные продукты, использующие SSL, такие как браузеры и Java.

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

Если провайдер не отправляет новый сертификат, он не будет включен в Java, и вам придется вручную добавлять новые сертификаты в хранилище доверенных сертификатов Java.

Так что, если вы получаете сообщение об ошибке вроде:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: не удалось построить путь PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации для запрошенной цели

... тогда у вас, вероятно, нет правильного корневого сертификата CA, и вам нужно будет вручную загрузить и установить сертификаты в хранилище ключей доверенных сертификатов Java. Вот способ сделать это: http://mikepilat.com/2011/05/adding-a-certificate-authority-to-the-java-runtime.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .