Я искал в интернете пару часов по этому вопросу, и ни один из найденных ответов на самом деле не вписывался в мою проблему, так что вот я, задаю свой первый в истории вопрос в SOF.
Итак, я пытаюсь открыть веб-браузер из Java-программы, используя библиотеку htmlunit.Веб-сайт, который мне нужно подключить, требует SSL-соединения, а сертификат хранится на USB-ключе.Это продукт iKey2023.
Система работала (я ее не писал), но срок действия одного из сертификатов в USB-ключе истек, поэтому он автоматически перешел к следующему (всего было 4 сертификата)), и он внезапно перестал работать.
Это дает мне javax.net.ssl.SSLPeerUnverifiedException: ошибка peer not authenticated.
Я вернулся домой и забыл точное имяметод, но я помню следующее.
Экземпляр браузера создан с использованием IE8
browser.setWebConnection метод был вызван.Этот метод, согласно API, является внутренним API.
Установите соединение с веб-сайтом, передав URL-адрес в качестве параметра
Он выбрасываетисключение на шаге 3.
Еще несколько подробностей.Маленькие детали могут быть неверными, но я пытаюсь описать большую картину.На шаге 2 метод запрашивает объект WebConnection в качестве параметра, и существует реализация этого интерфейса.В этой реализации хранилище ключей создается с использованием sun.security.pkcs11.SunPKCS11 (configFileInputStream) (правильно ли я это написал?)
Это было так:
Поставщик p = новое солнце.security.pkcs11.SunPKCS11 (configFileInputStream);Security.addProvider (p);
И создайте хранилище ключей из этого провайдера.
Используя это хранилище ключей, в реализации WebConnection он создает SSLSocket.
Итак, послесертификат был переключен на новый, он не получает сертификат правильно.
Вот что я пробовал.
Я пытался использовать разныеметоды в библиотеке htmlunit, что-то вроде setSecurityProvider, и я попытался поместить объект Provider, созданный в приведенном выше фрагменте кода.Я получил исключение приведения класса.
Я попытался вручную установить системные свойства (trustStore, trustStorePassword, keyStore и т. Д.).Чтобы сделать это, я хотел экспортировать сертификат из USB-ключа, но он не позволил мне экспортировать из него закрытый ключ, поэтому я не мог реально создать из него действительный файл PKCS12 (openSSL хотел приватныйфайл ключа вместе с файлом .pem для конвертации, и у меня не было этого файла ключа).
Они не работали, и я сейчас застрял.