SpringCloudGateway配置https
一.生成证书
证书本应是花钱买,客户端才能通过根CA仓库识别证书。
如果是自定义生成的证书,客户端访问时,会提示不安全的链接 是否继续访问,或者客户端可以将证书导入自己的本地CA仓库。
生成证书可以通过 openssl,或者jdk的工具keytool生成。
使用openssl,参考:https://www.jianshu.com/p/0e9ee7ed6c1d ,先生成虚拟的CA,再生成证书,再用CA为证书签名
使用keytool:
keytool -genkeypair -alias client -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore keystore.p12 -validity 3650
证书不同格式之间转换 参考:https://blog.csdn.net/qq_37049781/article/details/84837342
二.gateway配置
将证书放在 resources文件夹下
server:port: 9000ssl:enabled: truekey-alias: client //证书别名key-store: classpath:keystore.p12 //证书位置key-store-password: 123456 //生成证书时的密码key-store-type: PKCS12 //证书类型
如果是JKS类型证书:
server:ssl:key-alias: springenabled: truekey-password: springkey-store: classpath:selfsigned.jkskey-store-type: JKSkey-store-provider: SUNkey-store-password: spring
一般下游服务使用http,只有网关使用https,所以网关路由下游服务时,需要将https修改为http。以下是拦截器,在路由过滤器LoadBalancerClientFilter前 将请求修改。
这个参考《重新定义springcloud一书》,github地址:https://github.com/SpringCloud/spring-cloud-code/tree/master/ch18-4
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;import java.net.URI;/*** 在LoadBalancerClientFilter执行之前将Https修改为Http* https://github.com/spring-cloud/spring-cloud-gateway/issues/378*/
@Component
public class HttpsToHttpFilter implements GlobalFilter, Ordered {private static final int HTTPS_TO_HTTP_FILTER_ORDER = 10099;@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {URI originalUri = exchange.getRequest().getURI();ServerHttpRequest request = exchange.getRequest();ServerHttpRequest.Builder mutate = request.mutate();String forwardedUri = request.getURI().toString();if (forwardedUri != null && forwardedUri.startsWith("https")) {try {URI mutatedUri = new URI("http",originalUri.getUserInfo(),originalUri.getHost(),originalUri.getPort(),originalUri.getPath(),originalUri.getQuery(),originalUri.getFragment());mutate.uri(mutatedUri);} catch (Exception e) {throw new IllegalStateException(e.getMessage(), e);}}ServerHttpRequest build = mutate.build();return chain.filter(exchange.mutate().request(build).build());}/*** 由于LoadBalancerClientFilter的order是10100,* 要在LoadBalancerClientFilter执行之前将Https修改为Http,需要设置* order为10099* @return*/@Overridepublic int getOrder() {return HTTPS_TO_HTTP_FILTER_ORDER;}
}
三.问题
以上操作后,确实可以再浏览器以 https访问成功,但gateway报一个错误。
javax.net.ssl.SSLException: Received fatal alert: certificate_unknown
这个应该是客户端问题,客户端不信任这个证书,如果将证书添加到浏览器信任证书中,ie浏览器访问就不会报错,但谷歌浏览器还会。如果是正式证书应该不会有问题。
SpringCloudGateway配置https相关推荐
- Ubuntu 17.04 编译安装 Nginx 1.9.9 配置 https 免费证书
Ubuntu 17.04 编译安装 Nginx 1.9.9 配置 https 免费证书 安装 Nginx 安装依赖 $ apt-get update $ apt-get install build-e ...
- apache http配置https
apache http配置https <一,Lamp系统搭建> yum install httpd httpd-devel mysql mysql-server mysql-devel p ...
- Nginx配置https,反向代理多实例tomcat的操作记录
案例说明: 前面一层nginx+Keepalived部署的LB,后端两台web服务器部署了多实例的tomcat,通过https方式部署nginx反向代理tomcat请求.配置一如下: 1)LB层的ng ...
- 解决微信小程序配置https不成功问题
解决微信小程序配置https不成功问题 参考文章: (1)解决微信小程序配置https不成功问题 (2)https://www.cnblogs.com/ant-jmf17/p/8056989.html ...
- nginx 配置https 并解决重定向后https协议变成了http的问题
nginx 配置https 并解决重定向后https协议变成了http的问题 参考文章: (1)nginx 配置https 并解决重定向后https协议变成了http的问题 (2)https://ww ...
- 配置https后访问返回403 forbidden
今天在配置https的时候配置好,http能访问,https访问返回403 forbidden: 网上找了很多,改nginx.conf的user的 修改配置文件的 其实就是权限问题,是网站根目录的权限 ...
- iOS APP配置HTTPS流程
您的APP启用HTTPS了吗?距离2017年1月1日"苹果iOS强制要求HTTPS连接"还有不到1个月的时间,是否支持HTTPS直接影响APP能否在苹果商店顺利上架.本文将帮助您更 ...
- 关于NodeJS配置HTTPS服务、阿里云申请HTTPS证书
最新一直在折腾小程序 我是前后台一起做,前台不必说是微信的小程序,后端的用的是NODEJS. 所以就说一下NODEJS如何配置HTTPS服务 我的NODE用的是Express框架 直接上代码: 最重要 ...
- https nginx phpstudy_window下phpstudy使用nginx配置https
Nginx相关配置 安装Openssl (下载地址:http://slproweb.com/products/Win32OpenSSL.html) 安装完成记得配置环境变量. 变量名:OPENSSL_ ...
最新文章
- 微信小程序架构分析 (上)
- Windows上erl.exe的CPU使用率很高的问题【未解决】
- 【学术相关】RSPapers | 工业界推荐系统论文合集
- mysql 共享锁和排他锁 意向锁 记录锁 Gap Locks Next-Key Locks 插入意向锁介绍
- 教授因被指控“奴役”博士生遭学校解雇,反手将学校告上法庭并获赔偿...
- 8-字符串的压缩存储
- 开源老兵教你如何评估一项技术是否值得长期投入?
- mysql for centos_CentOs中mysql的安装与配置
- 中值滤波器和双边滤波器(python实现)
- python读坐标像素_python如何读取像素值
- 安全测试——SQL注入
- MATLAB 调用百度云文字识别的具体应用
- 【Photoshop抠图技巧】PS新手必备,七种高效好用的方法
- 链家租房数据抓取流程、分析
- python关于类和对象说法正确的是_关于类和对象的关系,下列描述正确的是()。
- VBA 64 32 调用dll的区别
- 先验分布,后验分布,似然函数
- jquery插件手风琴效果
- springboot校园兼职系统毕业设计源码463450
- 【无人驾驶】“自主代客泊车”/自动泊车方案调研 2
热门文章
- 云+社区【玩转腾讯云】征文活动,COSCI更有额外奖励
- 计算机一级模拟7试题,计算机一级模拟试题7.doc
- solr 过滤html标签,Solr
- mac版mysql初始密码忘记,重置密码
- Cocos系列视频教程
- c语言for循环如何打印菱形
- php代码 加密,PHP给源代码加密的几种方法汇总(推荐)
- PHP文件在线加密源码
- (2022年最新版本)Linux下基于ganache(v6.12.2)的简单投票DAPP(web3@1.7.1)(Node.js: v16.14.0.)(solc:‘0.8.12+commit)
- Apache Pulsar的Function流式计算框架使用