Это здорово и все такое, за исключением случаев, когда мы имеем дело с очень чистым / недавно установленный компьютер с Windows, где доверенные корневые центры сертификации содержат только ~16 записей. Я только недавно узнал о функции списка доверенных сертификатов Windows (CTL) — скрытом механизме, который прозрачно сверяет цепочки сертификатов со списком доверенных корней, который Windows загружает из Центра обновления Windows (или где-то еще, если он переопределен, например, объектом групповой политики). Это позволяет веб-браузерам без проблем работать с более чем несколькими сайтами, а двоичные файлы с цифровой подписью выполняться без предупреждений. Определенные операции, такие как посещение сайта в Internet Explorer (но не Edge), дополнительно приводят к переносу центра сертификации из CTL в хранилище доверенных корневых центров сертификации.
Однако я предполагаю, что Механизм CTL не запускается в рабочем процессе Java, поскольку Java не запрашивает Windows проверку цепочки сертификатов TLS — он просто проверяет цепочку на соответствие сертификатам, перечисленным из доверенных корневых центров сертификации (
Код: Выделить всё
CertOpenSystemStore). Конечным результатом является sun.security.validator.ValidatorException: не удалось построить путь PKIX: : sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации к запрошенной цели
Кто-нибудь знает способ запустить механизм миграции Windows с CTL на доверенные корневые центры сертификации? Очевидно, что если бы существовал собственный Java-способ сделать это, это было бы идеально, но даже если кто-то знает, какие API-интерфейсы Windows C вызывают это, поэтому я мог бы написать немного JNI, это было бы лучше, чем альтернатива сообщению пользователям посетить сайт в Internet Explorer, чтобы убедиться, что его корневой центр сертификации пользуется доверием приложения Java.
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/790 ... -migration