OpenFeign 微服务之间调用 https ssl证书配置
因公司项目部署的服务器安装了https ssl证书,所有请求需要变成https方式,项目中使用的是openfeign实现微服务之间调用,原http方式会报bad request 400 错误,做如下配置修改:
1.application.yml文件中加入证书信息:server.port为项目的端口号
server:
port: 9002
ssl:
protocol: TLS
key-store: classpath:xxx.com.jks
key-store-password: xxxxx
key-store-type: JKS
2.证书文件xxx.com.jks放在项目根目录下,此处是springboot项目,直接放在resources目录下即可
3.pom.xml引入独立的feign依赖
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
4.添加Https配置文件FeignHttpsConfig.java
import feign.Client;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory;
import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.net.ssl.*;
import java.security.*;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
@Configuration
public class FeignHttpsConfig {
@Bean
@ConditionalOnMissingBean
public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory,
SpringClientFactory clientFactory) throws NoSuchAlgorithmException, KeyManagementException {
SSLContext ctx = SSLContext.getInstance("TLS");
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 LoadBalancerFeignClient(new Client.Default(ctx.getSocketFactory(),
new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
// TODO Auto-generated method stub
return true;
}
}),
cachingFactory, clientFactory);
}
}
5.Feign客户端添加上述配置类
name值http请求时只写目标服务名 xx-user即可,配置https需要加上https//前缀,以及,configuration属性添加上述配置类FeignHttpsConfig.Class
@FeignClient(name = "https://xx-user", fallback = MyFallBack.class, configuration = {FeignHeaderConfig.class, FeignHttpsConfig.class})
public interface UserFeignService {
// 业务代码
}
6.完成以上配置即可实现微服务间调用采用https ssl证书方式
下一篇:
2023年前端流行什么技术和框架了?
