我从客户端获得了两个 .cer 文件,现在我的目标是使用 https 而不是使用 spring webclient 的 http 来访问客户端 api。因为我是 spring webclient 的新手,所以不知道该怎么做
我已使用以下命令将 .cer 导入到 keystore 中
keytool -import -file "C:\Users\ankur\Download\Entrust_Root_Certification_Authority-G2.cer" -keystore "C:\Program Files\Java\jre1.8.0_40\lib\security\cacerts" -storepass "changeit"
keytool -import -file "C:\Users\ankur\Download\certificate\Entrust_Certification_Authority-L1K.cer" -keystore "C:\Program Files\Java\jre1.8.0_40\lib\security\cacerts" -storepass "changeit
我在下面编写了代码,以便从 webclient 以编程方式访问 api
@Bean
public WebClient createWebClient() throws SSLException {
SslContext sslContext = SslContextBuilder
.forClient()
.trustManager(InsecureTrustManagerFactory.INSTANCE)
.build();
HttpClient httpClient = HttpClient
.create()
.secure(sslContextSpec -> sslContextSpec.sslContext(sslContext));
ClientHttpConnector connector = new ReactorClientHttpConnector(httpClient);
return WebClient.builder()
.clientConnector(connector).build();
}
application.yml
rest:
endpoint:https://someexample.com/xyz
我不知道如何处理 .cer 文件,在哪里存储这些 .cer 文件,我们是否需要在 Spring Boot 的资源文件夹中包含任何示例或链接,谢谢
最佳答案
下面是您可以将 ssl 证书配置到 webclient
的方法之一
第 1 步: 将所需的证书复制到您的 resources
文件夹
我们以 config/Entrust_Root_Certification_Authority-G2.cer 为例
第 2 步: 创建一个属性来在配置类之一中配置证书的位置,如下所示
@Value("${entrust.ssl.cert.path:config/Entrust_Root_Certification_Authority-G2.cer}")
private String entrustSslCertFilePath;
第 3 步: 在创建 SslContext
时加载这些证书
SslContext sslContext = SslContextBuilder.forClient()
.trustManager(new ClassPathResource(entrustSslCertFilePath).getInputStream())
.build();
注意:上面提到的我已经使用了 pem
文件,该文件工作正常,请尝试一下,如果需要,请随时将 cer
转换为 pem
> 文件和 sslshopper对于验证和转换 ssl 证书非常有帮助
谢谢
关于java - 使用 Spring Web Client 命中 https Rest 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61357365/