Какой должна быть среда по умолчанию для сертификации на стороне клиента (X509) - PullRequest
6 голосов
/ 17 февраля 2020

Я строил веб-загрузчики на протяжении многих лет (например, используя 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, а также хранилища по умолчанию

1 Ответ

3 голосов
/ 20 февраля 2020

Извините, я не уверен, сколько деталей вам нужно. Надеюсь, это поможет вам начать. Я могу расширить на шаги, как вам нужно. Просто дай мне знать.

В хранилище ключей хранится закрытый ключ и публикуется c В хранилище сертификатов и доверенных сертификатов хранятся доверенные сертификаты для других служб, которым вы хотите доверять. Java связывает каскасы хранилищ доверенных сертификатов и содержит стандартные широко известные доверенные центры сертификации.

В рамках рукопожатия ssl служба представляет свой сертификат publi c из своего хранилища ключей клиенту, а клиент, с другой стороны, проверяет представленный сертификат в своем доверенном хранилище.

Для любого программного доступа c я бы создал отдельный файл склада доверенных сертификатов и импортировал бы сертификаты для доверенных вам сервисов. Таким образом, в вашем случае вы должны импортировать сертификат, который представлен как https://osf.io/search/?q=coronavirus.

После создания хранилища доверенных сертификатов вы можете ссылаться на хранилище доверенных сертификатов с помощью аргументов jvm.

Шаги

  1. Используйте KeyTool для создания пустого хранилища доверенных сертификатов
  2. Используйте утилиту InstallCert или из браузера для импорта сертификата в хранилище доверенных сертификатов
  3. Ссылка на вновь созданное хранилище доверенных сертификатов в аргументе jvm ( javax. net .ssl.truststore)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...