关闭 ssl 证书 resttemplate spring 的验证

Turn off validation of ssl certificate resttemplate spring

提问人:Khaski 提问时间:5/16/2023 最后编辑:Khaski 更新时间:5/17/2023 访问量:217

问:

当我需要关闭 ssl 的验证时,我有问题 证书 rest模板。我找到了这个解决方案。

 @Bean
 public RestTemplate restTemplate() throws KeyStoreException, 
 NoSuchAlgorithmException, KeyManagementException {
TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, 
String authType) -> true;
    SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
            .loadTrustMaterial(null, acceptingTrustStrategy)
            .build();

    SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext);
    CloseableHttpClient httpClient = HttpClients.custom()
            .setSSLSocketFactory(csf)
            .build();

    HttpComponentsClientHttpRequestFactory requestFactory =
            new HttpComponentsClientHttpRequestFactory();

    requestFactory.setHttpClient(httpClient);
    return new RestTemplate(requestFactory);

但是在方法setHttpClient中,我无法注入我的httpClient,因为所需的方法setHttpClient类型是HttpClient.Everywhere,我发现只有这种方法可以禁用SSL证书的验证。我该如何解决这个问题?

弹簧

评论

0赞 Zack Macomber 5/17/2023
您可以使用 Spring 配置文件 - baeldung.com/spring-profiles
0赞 Khaski 5/17/2023
我只是在学习春天,你能解释一下你的意思以及我如何使用它吗?

答:

1赞 Zack Macomber 5/17/2023 #1

您可以创建一个像这样的“devRestTemplate”bean,它将基于您的非验证:RestTemplate

@Bean(name = "restTemplate")
@Profile("dev")
public RestTemplate devRestTemplate() {
    ...
}

而您的初级生产豆...RestTemplate

@Bean(name = "restTemplate")
@Primary
public RestTemplate restTemplate() {
    ...
}

然后,当您在计算机上运行应用程序时,只需将活动配置文件指定为“dev”,并且将使用非验证 Bean。

有关使用 Spring Profiles 的更多信息,请参阅 https://www.baeldung.com/spring-profiles

评论

0赞 Jankiel Goldman 6/7/2023
如何修复setHttpClient无法接收CloseableHttpClient?Spring 3.1 无法处理 apache http 4.x,这就是问题所在。