问题标签 [truststore]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
79906 浏览

java - 收到致命警报:bad_certificate

我正在尝试设置 SSL 套接字连接(并在客户端上执行以下操作)

  1. 我生成证书签名请求以获取签名的客户端证书

  2. 现在我有一个私钥(在 CSR 期间使用)、一个签名的客户端证书和根证书(从带外获得)。

  3. 我将私钥和签名的客户端证书添加到证书链中,并将其添加到密钥管理器中。以及信任管理器的根证书。但是我收到了一个错误的证书错误。

我很确定我使用的是正确的证书。我也应该将签名的客户端证书添加到信任管理器吗?试过了,还是没有运气。

我需要在这里创建某种证书链吗?
我也有一个带有这些组件的 p12,并且在使用非常相似的代码后,将私钥添加到 keymanager 并将根证书从 p12 添加到信任管理器,我可以使它工作。但现在我需要让它在没有 p12 的情况下工作。

编辑:请求堆栈跟踪。希望这应该足够了。(注意:我掩盖了文件名)

0 投票
1 回答
193 浏览

https - JBoss 6 找不到已安装的证书

我创建了一个带有自签名证书的密钥库,导出了证书,然后使用 IP 地址的别名重新导入了证书。

我想从这个服务器内部调用这个服务器上的另一个服务,地址]/.....

我无法让调用的客户端信任自己。如何指定信任库?

这是 server.xml 的关键部分:

我在尝试使用 https 从该服务器向其自身调用服务时收到此错误。

PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

谢谢

0 投票
1 回答
820 浏览

java - java 信任库

我了解密钥库如何为私钥工作。基本上,您创建一个密钥库,生成/签名/存储密钥,并根据别名,容器(JBoss、tomcat、WebLogic 或 WebSphere)将在初始化期间加载适当的密钥。我的问题与信任库有关。如果容器向外部网站发出请求,该网站的密钥由 Thawte 签名,容器如何知道从其信任库提供哪个公钥以允许完成 ssl 握手?信任库肯定有一个别名,但是当容器调用到远程站点的连接时,我真的怀疑它是否使用别名来查找匹配的公钥。

0 投票
1 回答
4564 浏览

soap - AXIS Soap Call - 仅对自签名证书使用信任库

我在客户端应用程序中使用 Axis 1.4 进行 SOAP 调用。我通过 HTTPS 调用服务。一些服务使用自签名证书,其他服务使用证书颁发机构颁发的证书。

我已使用此答案中的代码将自签名证书添加到我的信任库中。我的问题是信任库被用于所有调用——即使是对具有来自 CA 的有效证书的服务器的调用。

无论如何告诉 Axis 仅将信任库用于具有自签名证书的服务器?

0 投票
2 回答
9055 浏览

java - Java/Keystore 验证签名证书

我正在研究嵌入式码头服务器和客户端之间的客户端证书身份验证。他们都使用密钥库。客户端证书由 CA 签署的服务器证书签署。Jetty 使用 2 方法来验证客户端证书 javax.net.ssl.SSLEngine 似乎可以工作,他们也使用上面的代码。

当然我必须使用第二种方式......所以让我们专注于这段代码,这是验证签名证书的好方法吗?这是我的密钥库的转储:

客户端密钥库:

服务器信任库:

我不确定这些密钥库,但我尝试了不同的密钥库(将 CA 证书添加到客户端的证书链,将证书添加到信任库),但验证仍然失败。使用这些密钥库,第一种验证方式(SSLEngine)似乎可以工作。

调试输出太大,无法放在这里,但这里是堆栈跟踪:

如果我禁用吊销,或者如果我将最后一个证书(而不是第一个)设置为 X509CertSelector,则代码可以工作,但我不确定我在做什么。

我开始怀疑码头代码,但我不是证书和 SSL 握手方面的专家,所以它也可能来自错误的密钥库/信任库。这就是为什么我没有在码头的板上创建问题并在此之前询问过,以确保需要更改代码。

此外,了解如何在 Java 中验证签名证书可能很有用。

0 投票
3 回答
35577 浏览

java - 当只有 https URL 时,获取证书并将其添加到 Java 信任库?

我正在尝试通过 Google Cloud Message 服务器向 Android 设备发送推送通知。

我们用来执行此操作的 URL 是:

在我们的企业应用程序中,我们不使用默认的 CA 权限,并且出于安全原因,我们在 SSLContext 属性加载的信任库文件中手动添加我们信任的每个实体。我想将 GCM 证书添加到我们的信任库。

我不知道如何从该 URL 获取证书。由于页面重定向到另一个非 SSL 页面,因此 Chrome/Firefox 导出方式似乎不起作用。

有人有解决方案吗?

0 投票
2 回答
1900 浏览

java - 如何使用相同的 HttpClient 实例选择客户端证书?

我有一个由多个客户使用的应用程序(其中一个带有他/她的客户证书)。该应用程序应该通过 HTTPS 与 Web 服务(使用 HttpClient)进行通信。要在此 Web 服务中进行身份验证,需要提供客户端证书。如前所述,每个客户端都有不同的客户端证书,我需要使用当前客户端的证书。我有以下代码正在执行所描述的操作。

好的,它正在工作。但是有很多线程向这个服务发送请求。有时它给我一些问题。因此,我发现很多人告诉每个应用程序只有一个 HttpClient 更好,并且可以通过以下方式完成:

这样我就有了一个带有连接池的 HttpClient 。但是如何使用这种方法并为特定请求选择客户端证书?提前致谢。

编辑:

我将尝试解释我为什么要尝试这个。我们有时会遇到问题。服务器停止与 Web 服务器的通信,一段时间后,它又开始工作。需要注意的是,在调用 Web 服务之前已经完成了很多处理。因此,有一个池 Executor 创建线程来执行所有处理。工作完成后,该线程创建另一个与 Web 服务通信的线程。因此,第一个线程加入第二个线程超时(thread.join(timeout))。当第一个线程唤醒时,它会中断尝试与 web 服务通信的线程(如果尚未完成)。我不是实现这个的人,但它应该给请求一个超时来完成。在我的开发机器中,我创建了一个 JMeter 测试,它模拟了许多使用此服务的客户端并连接了 JConsole 以查看发生了什么。在完成 300 个任务(其中一些失败)后,Executor 的池创建的线程死亡。但是很多线程仍然活着,它们在 10 分钟后就死了。当我查看堆栈跟踪时,我看到它与 HttpClient 相关。然后,我开始搜索,发现有人说整个应用程序最好只使用一个 HttpClient ,使其汇集连接。我认为 HttpClient 在搜索要连接的端口时被锁定并被第一个线程中断。然后,不知何故,它锁定了很长时间。Executor 池创建的线程死亡。但是很多线程仍然活着,它们在 10 分钟后就死了。当我查看堆栈跟踪时,我看到它与 HttpClient 相关。然后,我开始搜索,发现有人说整个应用程序最好只使用一个 HttpClient ,使其汇集连接。我认为 HttpClient 在搜索要连接的端口时被锁定并被第一个线程中断。然后,不知何故,它锁定了很长时间。Executor 池创建的线程死亡。但是很多线程仍然活着,它们在 10 分钟后就死了。当我查看堆栈跟踪时,我看到它与 HttpClient 相关。然后,我开始搜索,发现有人说整个应用程序最好只使用一个 HttpClient ,使其汇集连接。我认为 HttpClient 在搜索要连接的端口时被锁定并被第一个线程中断。然后,不知何故,它锁定了很长时间。使其汇集连接。我认为 HttpClient 在搜索要连接的端口时被锁定并被第一个线程中断。然后,不知何故,它锁定了很长时间。使其汇集连接。我认为 HttpClient 在搜索要连接的端口时被锁定并被第一个线程中断。然后,不知何故,它锁定了很长时间。

编辑:

这就是我在 JConsole 中看到的。这一次,我只启动了 100 个任务,并且有 15 个线程处于这种状态:

0 投票
1 回答
2960 浏览

java - 在 Java 信任库中更新-更新自签名 CA 证书

我已经构建了一个 Java 应用程序,它向外部授权客户端公开 Web 服务。Web 服务使用带有证书身份验证的 WS-security。基本上我们充当自定义证书颁发机构 - 我们在我们的服务器上维护一个 java 信任库,并对其签名和添加客户的证书。目前我们有手动注册过程,要求 WS 客户端上传他们的证书签名请求。我们签署 CSR,使用命令行中的 keytool 将证书添加到我们的 java 信任库,然后将签署的证书与我们的 CA 证书一起返回给客户端。反过来,客户端使用他们的私钥签署他们的肥皂消息有效负载,并将签名证书嵌入到消息中。服务器端解密数字签名并验证嵌入式证书是否已签名并且在满足客户端请求之前与我们的信任库匹配。

虽然有点痛苦(由于体力劳动),但此设置运行良好。现在我意识到我们的根 CA 证书即将到期,因此我正在寻找设置维护策略。我应该如何更新自签名根 CA 证书?看起来我将不得不创建新的并替换原来的。这将影响所有必须接收新证书和导入新 CA 证书的客户端。这是正确的理解还是有更好的方法来处理这种情况?

如果重要的话,我已经使用 openssl 来生成原始密钥对。

0 投票
1 回答
227 浏览

tomcat - tomcat 不检查整个证书链

我有一个在 tomcat6 中运行的服务器,它需要信任客户端证书。我已经通过 HttpConnector“truststoreFile”属性配置了一个信任库。

客户端证书由中间证书签名,中间证书由根证书签名。这三个都是使用 openssl 创建的示例证书。

我在服务器的信任库中只包含了客户端证书和中间证书,客户端只能通过这两个证书与服务器通信。根证书是否需要在服务器的信任库中才能使服务器信任客户端证书。

0 投票
1 回答
20899 浏览

java - 如何以编程方式在磁盘上查找当前的信任库?

是否有任何函数可以告诉我程序中当前使用的信任库是什么。在 Windows 上,默认信任库位于 JAVA_HOME\lib\security\cacerts。

但是,可以通过多种方式更改默认值。

  • -Djavax.net.ssl.keyStore在命令行中使用

  • 使用Keystore类。

  • 如果程序在运行应用程序的应用服务器上运行,则可以通过其面板设置存储路径。

  • 如果程序在 Tomcat 上运行,则 Tomcat 设置可能会更改信任库。

和许多其他方式。

是否有一种编程方式可以找出当前处于活动状态的信任库的磁盘路径?