客户端(X509)认证的默认环境应该是什么

问题描述 投票:2回答:1

多年来,我一直在构建Web下载器(例如,使用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)
...

我可以通过浏览器(Firefox,Chrome)访问URL,并获得表示我想要的HTML,但是无法以编程方式访问它。

我已经阅读了一些有关如何解决此问题的说明(例如[2]),但是它们通常是指“您的密钥库”或“信任管理器”,好像每个人都知道这些是什么。我担心如果我不知道自己在做什么,就可能破坏安全性。我不知道如何向这些网站添加网站,或者我是否应该。

我在MACOSX上,似乎有一个二进制文件

"/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/security/cacerts"

一些答案建议我应该有一个名为“ truststore.jks”的文件,但不要说这应该在哪里或如何创建。

因此,我要求对系统组件进行简单说明,并提供最简单的解决方法。在某些情况下,我可以避免这种情况(例如,通过在命令行中使用curl),因此我不知道这是Java(8)问题的多少。

编辑:Trust Store vs Key Store - creating with keytool似乎可以解释KeyStore和TrustStore之间的区别,但是我仍然不知道该怎么做。

[1]http://machinepublishers.github.io/jBrowserDriver/com/machinepublishers/jbrowserdriver/JBrowserDriver.html[2] Using a custom truststore in java as well as the default one

java macos x509certificate pkix
1个回答
0
投票

对不起,我不确定您需要多少细节。希望它能帮助您入门。我可以根据需要扩展步骤。请让我知道。

密钥库存储私钥和公​​共证书,信任库存储您要信任的其他服务的受信任证书。Java将信任库cacerts捆绑在一起,并且它包含众所周知的默认信任证书颁发机构。

作为ssl握手的一部分,服务将其密钥库中的公共证书提供给客户端,而客户端则对照其信任库来验证所提供的证书。

对于任何编程访问,我都会创建一个单独的信任库文件,并为您信任的服务导入证书。因此,在您的情况下,您必须导入由https://osf.io/search/?q=coronavirus出示的证书。

一旦创建信任库,就可以使用jvm args引用信任库。

步骤

  1. 使用KeyTool创建空的信任库
  2. 使用InstallCert实用程序或从浏览器将证书导入到信任库中
  3. 参考jvm arg(javax.net.ssl.truststore)中新创建的信任库
© www.soinside.com 2019 - 2024. All rights reserved.