0

这个问题听起来我有点傻,但我在这里研究了很多问题/答案,但找不到适合我的案例的答案。

目前我正在使用RestTemplate 库为我目前正在处理的 java 库发出 HTTP 请求。为了成功地对 HTTPS URL 进行 HTTP 调用,我需要为我的 HTTP 客户端添加 SSL 配置。像这样的东西:

   clientBuilder
                .disableCookieManagement()
                .setDefaultRequestConfig(requestConfig)
                .setSSLSocketFactory(new SSLConnectionSocketFactory(SSLContexts.custom()
                        .loadTrustMaterial(null, new TrustSelfSignedStrategy())
                        .build()));

所以这个库应该作为 jar 可执行应用程序发送给用户,我知道使用自签名 SSL 证书对于一般用途来说不是一个好主意,因为可能有不承认它的 Web 服务器。我读到如果我获得了签名的 SSL 证书,那么我应该在 Keystore 上保存正确的密钥,并使用 Trustore 来确认服务器的证书。我认为我不能只将 Keystore 和 Trustore 传递给执行我的 java 库的客户端,所以我的问题是,Java 是否有内置的 SSL 证书,所以我可以以某种方式在 HTTP 客户端和内置的-in 证书将被使用。据我所知,node.js 提供了类似的东西。

谁能给我解释一下这对 java spring-boot 是如何工作的?

4

1 回答 1

0

可能会发生两个单独的证书验证。要使用 https 连接到服务器,您需要接收服务器的证书并使用信任库对其进行验证。

此外,您可以拥有一个客户端证书,并将其传递给服务器,以便它可以验证您的客户端。除非你被告知你需要这样做,否则你不需要这样做。除非服务器已专门配置为执行此操作,否则这是不可能的。如果这是您需要做的,您需要获取客户端证书,将其安装到密钥库中并在您的客户端中使用该密钥库。

因此,对于普通的 https,您不需要密钥库。

是否需要“TrustSelfSignedStrategy”取决于服务器。

如果服务器有一个有效的签名 SSL 证书,你不需要做任何特别的事情,RestTemplate 就可以了。

如果服务器有自签名证书,您需要将客户端配置为接受任何自签名证书,或者将服务器的证书加载到信任库中,以便客户端知道接受该特定证书。

于 2021-03-16T12:17:28.000 回答