一.生成证书

证书本应是花钱买,客户端才能通过根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相关推荐

  1. 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 ...

  2. apache http配置https

    apache http配置https <一,Lamp系统搭建> yum install httpd httpd-devel mysql mysql-server mysql-devel p ...

  3. Nginx配置https,反向代理多实例tomcat的操作记录

    案例说明: 前面一层nginx+Keepalived部署的LB,后端两台web服务器部署了多实例的tomcat,通过https方式部署nginx反向代理tomcat请求.配置一如下: 1)LB层的ng ...

  4. 解决微信小程序配置https不成功问题

    解决微信小程序配置https不成功问题 参考文章: (1)解决微信小程序配置https不成功问题 (2)https://www.cnblogs.com/ant-jmf17/p/8056989.html ...

  5. nginx 配置https 并解决重定向后https协议变成了http的问题

    nginx 配置https 并解决重定向后https协议变成了http的问题 参考文章: (1)nginx 配置https 并解决重定向后https协议变成了http的问题 (2)https://ww ...

  6. 配置https后访问返回403 forbidden

    今天在配置https的时候配置好,http能访问,https访问返回403 forbidden: 网上找了很多,改nginx.conf的user的 修改配置文件的 其实就是权限问题,是网站根目录的权限 ...

  7. iOS APP配置HTTPS流程

    您的APP启用HTTPS了吗?距离2017年1月1日"苹果iOS强制要求HTTPS连接"还有不到1个月的时间,是否支持HTTPS直接影响APP能否在苹果商店顺利上架.本文将帮助您更 ...

  8. 关于NodeJS配置HTTPS服务、阿里云申请HTTPS证书

    最新一直在折腾小程序 我是前后台一起做,前台不必说是微信的小程序,后端的用的是NODEJS. 所以就说一下NODEJS如何配置HTTPS服务 我的NODE用的是Express框架 直接上代码: 最重要 ...

  9. https nginx phpstudy_window下phpstudy使用nginx配置https

    Nginx相关配置 安装Openssl (下载地址:http://slproweb.com/products/Win32OpenSSL.html) 安装完成记得配置环境变量. 变量名:OPENSSL_ ...

最新文章

  1. 微信小程序架构分析 (上)
  2. Windows上erl.exe的CPU使用率很高的问题【未解决】
  3. 【学术相关】RSPapers | 工业界推荐系统论文合集
  4. mysql 共享锁和排他锁 意向锁 记录锁 Gap Locks Next-Key Locks 插入意向锁介绍
  5. 教授因被指控“奴役”博士生遭学校解雇,反手将学校告上法庭并获赔偿...
  6. 8-字符串的压缩存储
  7. 开源老兵教你如何评估一项技术是否值得长期投入?
  8. mysql for centos_CentOs中mysql的安装与配置
  9. 中值滤波器和双边滤波器(python实现)
  10. python读坐标像素_python如何读取像素值
  11. 安全测试——SQL注入
  12. MATLAB 调用百度云文字识别的具体应用
  13. 【Photoshop抠图技巧】PS新手必备,七种高效好用的方法
  14. 链家租房数据抓取流程、分析
  15. python关于类和对象说法正确的是_关于类和对象的关系,下列描述正确的是()。
  16. VBA 64 32 调用dll的区别
  17. 先验分布,后验分布,似然函数
  18. jquery插件手风琴效果
  19. springboot校园兼职系统毕业设计源码463450
  20. 【无人驾驶】“自主代客泊车”/自动泊车方案调研 2

热门文章

  1. 云+社区【玩转腾讯云】征文活动,COSCI更有额外奖励
  2. 计算机一级模拟7试题,计算机一级模拟试题7.doc
  3. solr 过滤html标签,Solr
  4. mac版mysql初始密码忘记,重置密码
  5. Cocos系列视频教程
  6. c语言for循环如何打印菱形
  7. php代码 加密,PHP给源代码加密的几种方法汇总(推荐)
  8. PHP文件在线加密源码
  9. (2022年最新版本)Linux下基于ganache(v6.12.2)的简单投票DAPP(web3@1.7.1)(Node.js: v16.14.0.)(solc:‘0.8.12+commit)
  10. Apache Pulsar的Function流式计算框架使用