Я строил веб-загрузчики на протяжении многих лет (например, используя Apache HTTPClient и недавно JBrowser [1]). Они работали нормально до недавнего времени, когда некоторые сайты приводят к ошибкам сертификации. Я не понимаю деталей, и я не могу найти простой учебник для людей, которые относительно мало знают о сертификатах (например, как выглядит и как он получен или создан). Это запрос на объяснение по умолчанию самого простого случая и как его исправить. Типичная ошибка:
[2020-02-17T09:38:24.249][Instance 1][Port 57129] Warning: Single GUI Threadiong is enabled, FPS should be slower
[2020-02-17T09:38:29.737][Instance 1][Port 57129] Feb 17, 2020 9:38:29 AM com.sun.webkit.network.URLLoader doRun
[2020-02-17T09:38:29.737][Instance 1][Port 57129] WARNING: Unexpected error
[2020-02-17T09:38:29.737][Instance 1][Port 57129] java.io.IOException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target: https://osf.io/search/?q=coronavirus
[2020-02-17T09:38:29.737][Instance 1][Port 57129] at com.machinepublishers.jbrowserdriver.StreamConnection.exec(StreamConnection.java:369)
[2020-02-17T09:38:29.737][Instance 1][Port 57129] at com.machinepublishers.jbrowserdriver.StreamConnection.getResponseCode(StreamConnection.java:449)
[2020-02-17T09:38:29.737][Instance 1][Port 57129] at com.sun.webkit.network.URLLoader.receiveResponse(URLLoader.java:414)
...
Я могу получить доступ к URL через браузеры (Firefox, Chrome) и получить HTML, который представляет то, что я хочу, но не могу получить к нему программный доступ.
Я прочитал несколько отчетов о том, как это исправить (например, [2]), но они обычно ссылаются на «ваш Keystore» или «менеджер доверия», как будто все знают, что это такое. Я обеспокоен тем, что, если я не знаю, что я делаю, я могу нарушить безопасность. Я не знаю, как я могу добавить сайты на них или даже должен ли я.
Я нахожусь на MACOSX, и у меня, похоже, есть двоичный файл
"/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/JRE/lib/security/cacerts"
В некоторых ответах я должен у меня есть файл с именем "truststore.jks", но не говорите, где он должен быть и как он был создан.
Поэтому я прошу простое объяснение компонентов системы и самый простой способ исправить это. В некоторых случаях я могу избежать этого (например, используя curl
из командной строки), поэтому я не знаю, насколько это проблема Java (8).
РЕДАКТИРОВАТЬ: Хранилище доверия против хранилища ключей - создание с помощью keytool , кажется, объясняет разницу между KeyStore и TrustStore, но я до сих пор не понимаю, что делать.
[1] http://machinepublishers.github.io/jBrowserDriver/com/machinepublishers/jbrowserdriver /JBrowserDriver.html [2] Использование собственного склада доверенных сертификатов в java, а также хранилища по умолчанию