feign调用https接口_spring boot微服务之https调用
前言接上一篇的安全加固之https http://www.jianshu.com/p/46cad1265561 之后,今天我们来讨论一下spring boot微服务怎么来支持https调用。BTW: 我们的重点是讨论服务之间https调用的解决方案。ssl证书spring boot的application.yml提供了一下几个选项,来用于支持httpsserver.ssl.key-storeser
前言
接上一篇的安全加固之https http://www.jianshu.com/p/46cad1265561 之后,今天我们来讨论一下spring boot微服务怎么来支持https调用。
BTW: 我们的重点是讨论服务之间https调用的解决方案。
ssl证书
spring boot的application.yml提供了一下几个选项,来用于支持https
server.ssl.key-store
server.ssl.key-store-password
server.ssl.trust-store
server.ssl.trust-store-password
从配置上面,我们就可以看到,需要key-store、trust-store
那么就来生成这些,上次的那篇文章,我们得到了root.key root.crt根证书
#生成服务端私钥和证书申请请求
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/C=CN/ST=ZheJiang/L=HangZhou/O=Xiaobaxi/OU=GA/CN=xiaobaxi.com" -out server.csr
#使用根证书签发服务端证书
openssl x509 -req -in server.csr -CA root.crt -CAkey root.key -CAcreateserial -out server.crt -days 1825 -extensions SAN -extfile san.cnf
# 生成pkcs12
openssl pkcs12 -export -in server.crt -inkey server.key -out server.pkcs12
# pkcs12 -> jks
keytool -importkeystore -srckeystore /opt/ca/server.pkcs12 -destkeystore server.jks -srcstoretype pkcs12
# trust strore
keytool -importcert -alias ca -file /opt/ca/root.crt -keystore servertrust.jks
配置证书
将server.jks跟servertrust.jks拷贝到微服务的classpath目录下
store.jpg
配置微服务的application.yml,增加ssl的相关配置,我们不是金融支付类的,选择简单一点:单向认证
server:
port: 8443
ssl:
enabled: true
client-auth: want #这个地方,我们选择简单点
key-store: classpath:server.jks
key-store-password: 123456
trust-store: classpath:servertrust.jks
trust-store-password: 123456
使用FeignClient进行调用
feign默认的底层发送http请求用的是JDK的URLConnetion,参见feign-core包中的Client接口以及Default内部类实现
httpurlconnection.png
如果想通过HttpClient或者OkHttpClient来作为feign底层发送http请求的实现,则在org.springframework.cloud.netflix.feign.ribbon.FeignRibbonClientAutoConfiguration这个配置类中,有对这两个类的实现进行了封装:
HttpClient配置:
httpclient.PNG
OkHttpClient也是类似的配置
那我们就对这两个配置进行修改
通过@Configuration的配置类实现OkHttpClient、HttpClient的ssl功能
httpclientssl.PNG
OkHttpClient也是同理的配置,也是load trustStore -- X509TrustManager -- SSLSocketFactory -- OkHttpClient build这样的流程
接下去,通过Enable的方式来动态启停这个配置,默认为HttpClient
enable.PNG
那如何在OkHttpClient、HttpClient两个之中进行选择呢,采用ImportSelector的selectImports方法来进行选用哪个配置
import.PNG
最后,将这些配置封装成starter,以方便别的服务进行应用配置,哦,别忘记了,@FeignClient的value中需要配置https啦
需要注意的是,一般情况下内网服务调用不走https,通过api网关来做。算是做一个小测试。
BTW:感谢金童鞋的支持~~~
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)