Feign忽略https接口调用SSL证书验证

报错信息:
ERROR javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names matching IP address 10.25.193.111 found

Caused by: java.security.cert.CertificateException: No subject alternative names matching IP address 10.25.193.111 found

这是feign请求https接口因为SSL证书校验报的错,我们如果想忽略证书校验,可以采用下面这个方法:

// SearchClient 调用接口
public interface SearchClient {
    @RequestLine("POST /testPost")
    JSONObject testPost();
}
import feign.Feign;
import feign.Logger;
import feign.Request;
import feign.codec.Encoder;
import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder;
import feign.slf4j.Slf4jLogger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import xxx.IgnoreHttpsSSLClient;

// SearchClient Feign接口调用构建初始化
@Configuration
public class FeignConfig {
	@Bean
	public SearchClient searchClient(IgnoreHttpsSSLClient ignoreHttpsSSLClient) {
	    return Feign.builder()
	       .encoder(new JacksonEncoder())
	       .decoder(new JacksonDecoder())
	       .logLevel(Logger.Level.FULL)
	       .logger(new Slf4jLogger(SearchClient.class))
	       .client(ignoreHttpsSSLClient.feignClient())
	       .options(new Request.Options(60000, 60000))
	       .target(SearchClient.class, "https://10.25.193.111:443/");
	}
}
import feign.Client;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

@Configuration
public class IgnoreHttpsSSLClient {

    @Bean
    @ConditionalOnMissingBean
    public Client feignClient() {
        try {
            SSLContext ctx = SSLContext.getInstance("SSL");
            X509TrustManager tm = new X509TrustManager() {
                @Override
                public void checkClientTrusted(X509Certificate[] chain,String authType) throws CertificateException {
                }

                @Override
                public void checkServerTrusted(X509Certificate[] chain,String authType) throws CertificateException {
                }

                @Override
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
            };
            ctx.init(null, new TrustManager[]{tm}, null);
            return new Client.Default(ctx.getSocketFactory(), (hostname, session) -> true);
        } catch (Exception e) {
            return null;
        }
    }
}

我这里是手动创建的SearchClient,如以上代码,将自定义的Client传入SearchClient初始化构建方法中,即可生效,忽略SSL证书校验。


如果你的Feign是使用注解方式构建初始化的,可如下配置,例如:

@FeignClient(value = "testFeignClient", url = "https://10.25.193.111:443/", configuration = TestFeignClientConfig.class)
public interface TestFeignClient {
	@RequestLine("POST /testPost")
    JSONObject testPost();
}
public class TestFeignClientConfig {
	
	// 加载自定义Client
	@Bean
    @ConditionalOnBean(IgnoreHttpsSSLClient.class)
    public Client generateClient(IgnoreHttpsSSLClient ignoreHttpsSSLClient) {
        return ignoreHttpsSSLClient.feignClient();
    }
}
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值