java.security.cert.CertificateException: сертификаты не соответствуют ограничениям алгоритма

У меня есть приложение сопоставления, которое может добавлять базовые карты ArcGIS 9.3+ с учетом URL-адреса. Один из URL-адресов, которые я хотел бы добавить, является URL-адресом клиента и защищен. Мое приложение сопоставления использовало Java 6 раньше и смогло добавить защищенный URL без проблем. Теперь я обновлен до Java 7 и получаю

"java.security.cert.CertificateException: Certificates does not conform to algorithm constraints" 

исключение. Сначала я считаю, что это так, потому что в Java 7 по умолчанию алгоритм MD2 для подписывания сертификатов SSL отключен. Вы можете увидеть это в файле java.security:

 "jdk.certpath.disabledAlgorithms=MD2" 

Но когда я проверяю Certification Signature Algorithm этого URL-адреса, он говорит SHA-1 . Что еще более странно, если я прокомментирую "jdk.certpath.disabledAlgorithms=MD2" в файле java.security , URL-адрес будет работать без проблем. MD2 используется где-то еще во время процесса SSL? Я что-то упустил?

Задний план

MD2 был широко признан небезопасным и, следовательно, отключен на Java в версии JDK 6u17 (см. Примечания к выпуску http://www.oracle.com/technetwork/java/javase/6u17-141447.html , «Отключить MD2 в проверке цепочки сертификатов») , а также JDK 7 в соответствии с конфигурацией, указанной в java.security .

Verisign использовал корневой сертификат classа 3 с алгоритмом подписи md2WithRSAEncryption (серийный номер 70:ba:e4:1d:10:d9:29:34:b6:38:ca:7b:03:cc:ba:bf ), но устарел он и заменил его другим сертификатом с тем же ключом и именем, но подписал с алгоритмом sha1WithRSAEncryption . Тем не менее, некоторые серверы по-прежнему отправляют старый подписанный сертификат MD2 во время установления связи SSL (по иронии судьбы, я столкнулся с этой проблемой на сервере под управлением Verisign!).

Вы можете убедиться, что это так:

openssl s_client -showcerts -connect :

Последние версии JDK (например, 6u21 и все выпущенные версии 7) должны решить эту проблему, автоматически удалив сертификаты с тем же эмитентом и открытым ключом как надежный якорь (по умолчанию в cacerts).

Если у вас все еще есть эта проблема с новыми JDK

Проверьте, есть ли у вас собственный менеджер доверия, реализующий старый интерфейс X509TrustManager . Предполагается, что JDK 7+ совместим с этим интерфейсом, однако на основе моего исследования, когда диспетчер доверия реализует X509TrustManager а не новый X509ExtendedTrustManager ( docs ), JDK использует свою собственную оболочку ( AbstractTrustManagerWrapper ) и каким-то образом обходит внутреннее исправление этой проблемы ,

Решение:

  1. использовать диспетчер доверия по умолчанию или

  2. измените свой собственный менеджер доверия, чтобы напрямую расширить X509ExtendedTrustManager (простое изменение).

Eclipse не удалось подключиться к репозиториям https SVN (также следует применять к любому приложению с использованием SSL / TLS).

svn: E175002: соединение завершено: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: сертификаты не соответствуют ограничениям алгоритма

Проблема была вызвана последним обновлением Java 8 OpenJDK, которое отключило алгоритмы, связанные с MD5. В качестве обходного пути до выпуска новых сертификатов (если когда-либо), измените следующие ключи в файле java.security

ПРЕДУПРЕЖДЕНИЕ
Имейте в виду, что это может иметь последствия для безопасности, поскольку отключенные алгоритмы считаются слабыми. В качестве альтернативы обходной путь может применяться на основе JVM с помощью параметра командной строки для использования внешнего файла java.security с этими изменениями, например:
java -Djava.security.properties=/etc/sysconfig/noMD5.java.security
Для Eclipse добавьте строку на eclipse.ini ниже -vmargs
-Djava.security.properties=/etc/sysconfig/noMD5.java.security

оригинальные ключи

 jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize < 1024 jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 768 

изменить на

 jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024 jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 768 

Файл java.security находится в linux 64 в /usr/lib64/jvm/java/jre/lib/security/java.security

У нас есть эта проблема с одной базой данных, которую мы не контролируем, и она требует другого решения (перечисленные здесь не работают). Для меня мне нужно:

 -Djdk.tls.client.protocols="TLSv1,TLSv1.1" 

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

На Fedora 28 просто обратите внимание на линию

security.useSystemPropertiesFile = TRUE

свойств java.security .

Fedora 28 представил внешний файл управления отключенными алгоритмами при

/etc/crypto-policies/back-ends/java.config

Вы можете отредактировать этот внешний файл, или вы можете исключить его из java.security.

это, скорее всего, происходит потому, что где-то рядом с цепочкой сертификатов у вас есть сертификат, скорее старый корневой файл, который все еще подписан с алгоритмом MD2RSA.

Вам нужно найти его в своем хранилище сертификатов и удалить его.

Затем вернитесь в свой центр сертификации и спросите их о новом корне.

Скорее всего, это будет тот же самый корень с тем же периодом действия, но он будет повторно сертифицирован с помощью SHA1RSA.

Надеюсь, эта помощь.

коллеги.

Я столкнулся с этой проблемой во время разработки тестов автоматизации для нашего REST API. JDK 7_80 был установлен только на моей машине. До того, как я установил JDK 8, все работало отлично, и у меня была возможность получить токены OAuth 2.0 с помощью JMeter . После того, как я установил JDK 8, кошмар с Certificates does not conform to algorithm constraints .

У JMeter и Serenity не было возможности получить токен. Для выполнения запроса JMeter использует библиотеку JDK. Библиотека просто вызывает исключение, когда вызов библиотеки выполняется для подключения к конечным точкам, которые используют его, игнорируя запрос.

Следующее – прокомментировать все строки, посвященные disabledAlgorithms, в файлах ALL java.security.

 C:\Java\jre7\lib\security\java.security C:\Java\jre8\lib\security\java.security C:\Java\jdk8\jre\lib\security\java.security C:\Java\jdk7\jre\lib\security\java.security 

Затем он начал работать наконец. Я знаю, это подход грубой силы, но это был самый простой способ его исправить.

 # jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 768 # jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize < 1024 

У меня эта проблема в SOAP-UI, и ни одно решение выше не помогло мне.

Правильное решение для меня заключалось в том, чтобы добавить

-Dsoapui.sslcontext.algorithm = TLSv1

в файле vmoptions (в моем случае это было … \ SoapUI-5.4.0 \ bin \ SoapUI-5.4.0.vmoptions)

Поскольку этот результат является первым, что Google возвращает для этой ошибки, я просто добавлю, что если кто-то ищет способ, измените настройки безопасности Java без изменения глобального файла java.security (например, вам нужно запустить некоторые тесты), вы можете просто предоставьте переопределяющий файл безопасности с помощью параметра JVM -Djava.security.properties = ваш / файл / путь, в котором вы можете включить необходимые алгоритмы, переопределив их.

Используя openjdk-7 внутри dockerа, я установил файл с содержимым https://gist.github.com/dtelaroli/7d0831b1d5acc94c80209a5feb4e8f1c#file-jdk-security

 #Location to mount /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/security/java.security 

Благодаря @ luis-muñoz

  • Как обрабатывать недопустимые SSL-сертификаты с помощью Apache HttpClient?
  • Не удалось найти допустимый путь сертификации для запрошенной целевой ошибки даже после импорта сертификата
  • Как добавить сертификат с самозаверенного сервера в доверенные сертификаты в Chrome?
  • Использовать самоподписанный сертификат cURL?
  • Предупреждения Firefox «Неверное подключение» при посещении уважаемых сайтов HTTPS при использовании учетной записи ребенка
  • Как программно установить SSLContext клиента JAX-WS?
  • Apache HTTPClient SSLPeerUnverifiedException
  • Как мне сделать TLS с BouncyCastle?
  • Как я могу создать хранилище ключей из существующих сертификатов (abc.crt) и файлов abc.key?
  • Как заставить java-сервер принимать только tls 1.2 и отклонять tls 1.0 и tls 1.1 соединения
  • Использование CERT Tapioca на VM
  • Interesting Posts

    Угловой разъем с несколькими маршрутизаторами в одном шаблоне

    Как изменить, какой монитор мой компьютер использует при загрузке?

    C #, FindControl

    Как передать значение аргумента по умолчанию для члена экземпляра методу?

    Где Windows Vista хранит данные реестра на жестком диске?

    Как динамически изменять содержимое в iframe с помощью jquery?

    Могу ли я полностью отключить PCIe Video / Graphics Card для каждого BIOS / программного обеспечения?

    Как растянуть или масштабировать окна, чтобы они соответствовали размерам высоты и ширины разрешения?

    Панель задач Windows 7: как иметь несколько столбцов значков?

    Можно ли отключить прокрутку на ViewPager

    в чем разница между «супер» и «расширением» в Java Generics

    Элементы меню NavigationView со счетчиком справа

    Не удалось решить версию для org.apache.maven.archetypes

    Использование Java для расшифровки openssl aes-256-cbc с использованием предоставленного ключа и iv

    Запретить автоматическое удаление Outlook сообщений электронной почты

    Давайте будем гением компьютера.