springboot使用https忽略证书
时间: 2023-10-04 11:12:57 浏览: 279
在使用Spring Boot进行https请求时,如果要忽略证书验证,可以通过自定义HttpClient来实现。下面是一种实现方式:
```java
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import javax.net.ssl.SSLContext;
@Configuration
public class RestTemplateConfig {
@Autowired
private RestTemplateBuilder restTemplateBuilder;
@Bean
public RestTemplate restTemplate() throws Exception {
SSLContext sslContext = SSLContextBuilder.create()
.loadTrustMaterial(new TrustSelfSignedStrategy())
.build();
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
return restTemplateBuilder.requestFactory(() -> requestFactory).build(); }
}
```
上述代码中,我们通过自定义`RestTemplate`的`HttpClient`来实现忽略证书验证。具体步骤如下:
1. 创建一个`SSLContext`对象,使用`SSLContextBuilder`加载信任自签名证书的策略。
2. 创建一个`SSLConnectionSocketFactory`对象,使用上一步的`SSLContext`对象和`NoopHostnameVerifier`实例。
3. 创建一个自定义的`HttpClient`对象,将上一步的`SSLConnectionSocketFactory`对象设置为它的连接工厂。
4. 创建一个`HttpComponentsClientHttpRequestFactory`对象,将自定义的`HttpClient`对象设置为它的底层实现。
5. 最后,使用`RestTemplateBuilder`构建一个带有自定义`HttpComponentsClientHttpRequestFactory`对象的`RestTemplate`。
这样配置后,Spring Boot应用程序在进行https请求时将会忽略证书验证。请注意,这种方式存在安全风险,慎重使用。
阅读全文