【Java开发】Spring Cloud 11:Gateway 配置 ssl 证书(https、http、域名访问)

这篇具有很好参考价值的文章主要介绍了【Java开发】Spring Cloud 11:Gateway 配置 ssl 证书(https、http、域名访问)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近研究给微服务项目配置 ssl 证书,如此才可以对接微信小程序(需要使用 https 请求)。传统单体项目来说,首先往项目中添加证书文件,然后在配置文件中配置 ssl 证书路径、密码等相关信息;那么微服务这么多项目,总不能一个个配置 ssl 证书,最后发现可以直接通过网关 Gateway 解决该问题,完全不用对微服务下的项目做变动,亲测有效。

目录

1 SSL/TLS 证书

1.1 介绍

HTTPS协议

1.2 证书申请

1.3 证书类型及选择

2 Gateway 网关配置 ssl 证书

2.1 支持 https 访问

① 证书移到 resources 目录

② yml 文件中配置 ssl 证书

2.2 支持 https 和 http 访问

① 证书移到 resources 目录

② yml 文件中配置 ssl 证书

③ http 端口设置:

④ HttpServer.java

2.3 支持 https 或 http 访问

① 证书移到 resources 目录

② yml 文件中配置 ssl 证书

③ IsSecure 配置

2.4 服务器域名访问

① https+域名+端口访问

② http+域名+端口访问


1 SSL/TLS 证书

1.1 介绍

SSL/TLS证书是一种数字证书,用于通过SSL/TLS协议对网站进行加密和认证。它是在客户端和服务器之间建立安全连接的一种方式,以确保数据在传输过程中被加密和保护。SSL/TLS证书包含了一些信息,如证书持有人的名称、证书颁发机构的名称、证书有效期、公钥等等。

其中,公钥是证书中最重要的信息之一。它用于加密数据并将其发送到服务器,而只有服务器上的私钥才能解密这些数据。证书的颁发机构会对证书持有人进行身份验证,并在验证成功后签发证书,以确保证书的可靠性和安全性。

SSL/TLS证书可以分为三种类型:DV(域名验证)证书、OV(组织验证)证书和EV(增强验证)证书。DV证书只验证域名所有权,OV证书进行了更严格的身份验证,而EV证书则需要进行更加深入的身份验证,以确保证书持有人的身份和组织的真实性。

HTTPS协议

简单来说,HTTPS协议 = HTTP协议 + SSL/TLS协议,在进行HTTPS数据传输时,需要使用SSL/TLS对数据进行加密和解密,同时使用HTTP协议对加密后的数据进行传输。

HTTPS协议的目的就是提高传输安全等级,如保护账号、密码、在线交易记录等敏感信息

【Java开发】Spring Cloud 11:Gateway 配置 ssl 证书(https、http、域名访问)

📌 通信过程

  1. 客户端向服务器发起 HTTPS 请求,连接到服务器的指定端口(一般是443);
  2. 服务器端存在公钥服务器端私钥,用于非对称加密,服务器将公钥发送给客户端;
  3. 客户端收到服务器端发送的证书后,验证其合法性,若公钥合格,那么客户端会生成客户端密钥(client key、随机值),然后将公钥客户端密钥非对称加密成密文(包含请求信息),HTTPS 中的第一次 HTTP 请求结束。
  4. 客户端发起 HTTPS 中的第二个 HTTP 请求,将加密后的密文发送给服务器。
  5. 服务器端收到密文后,使用私钥对其进行非对称解密,解密后获取客户端密钥,此时服务器端判定 https 访问正确,使用公钥客户端密钥继续非对称加密成密文(包含返回信息),然后将该密文发送给客户端。
  6. 客户端收到密文后,使用客户端密钥对其进行解密,获得服务器端发送的真实数据。如此,HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

总之 SSL/TLS 证书是为 https 请求服务的,可以简单将其理解为 https 请求的重要媒介,以此来保证请求的安全性和准确性。

1.2 证书申请

SSL/TLS 证书由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。

📌 申请步骤

  1. 选择SSL证书类型:根据您的网站和业务需求,选择适合的SSL证书类型,如DV SSL、OV SSL、EV SSL等。
  2. 验证域名所有权:您需要验证您拥有该域名的所有权,一般有两种方式:DNS验证和文件验证。DNS验证需要在域名的DNS记录中添加一条特定的TXT记录,文件验证需要在您的网站根目录中放置一个特定的文件。
  3. 提交SSL证书申请:选择SSL证书品牌和证书期限,填写相关信息并提交SSL证书申请。
  4. 审核和颁发SSL证书:SSL证书申请提交后,证书颁发机构会对您的申请进行审核,审核通过后会颁发SSL证书,并将证书文件发送给您。
  5. 安装SSL证书:根据您的服务器类型和操作系统,按照证书颁发机构提供的安装指南安装SSL证书。

阿里云、腾讯云、华为云等平台都可以申请,不过无论使用哪种方式,申请SSL证书前,您需要先进行域名验证,确保您拥有该域名的所有权或管理权。验证方式有多种,包括DNS验证、文件验证、邮箱验证等。

以下是申请成功的阿里云免费ssl证书:

【Java开发】Spring Cloud 11:Gateway 配置 ssl 证书(https、http、域名访问)

1.3 证书类型及选择

点击上图中的下载按钮,有诸多类型的证书供选择👇

【Java开发】Spring Cloud 11:Gateway 配置 ssl 证书(https、http、域名访问)

乍一看会有点懵,到底自己的项目该如何选择呢?

如果是 Spring Boot 项目的话,可选择红框内的这两项,首先因为 Spring Boot 默认的 web 服务容器是 Tomcat;然后 JKS 由 JDK 支持,而 Spring Boot 又是以 JDK(Java Development Kit)为基础。其余证书就看服务器类型了~

我选择了JKS,下载解压后有两个文件,分别是 .jks 后缀和 .txt 后缀的 👇

【Java开发】Spring Cloud 11:Gateway 配置 ssl 证书(https、http、域名访问)

2 Gateway 网关配置 ssl 证书

前言讲了 spring boot 单体项目配置 ssl 证书的流程,其实 Gateway 配置方式类似,虽然 Gateway 本身不是 spring boot 框架(spring-cloud-starter-gateway 与 spring boot 冲突),但是 Gateway 也是属于 spring 框架的,而 spring 框架支持配置 ssl 证书,因此可完成该配置。

背景:SpringBoot版本:2.4.2,SpringCloud版本:2020.0.1

2.1 支持 https 访问

第一种情况,微服务项目只支持 https 访问,也就是该微服务只支持客户端进行 https 报错,若进行 http 访问则会报错。若项目适用较为简单,可使用该方式。

① 证书移到 resources 目录

首先将证书移到 Gateway 项目的 resources 目录下,供项目读取 👇

【Java开发】Spring Cloud 11:Gateway 配置 ssl 证书(https、http、域名访问)

② yml 文件中配置 ssl 证书

下边的 443 并不是说固定的,可进行指定,这也是 gateway 网关的访问端口。如果该项目需要部署到服务器上,那你需要开放该指定端口,那么客户端才能进行访问。

server:
  port: 443 #https端口,可指定
  # 配置SSL 证书
  ssl:
    key-store : classpath:xxxx.com.jks #ssl文件名称
    key-store-password : xxxx #ssl文件密码
    key-store-type: JKS
    enabled: true

至此配置完成,可以说和单体项目的配置别无二致。

注意:此时其他微服务项目是没有配置 ssl 证书的,你的 https 访问流程(请求时将 http 改为 https 即可)如下:https访问 -> 网关 -> 代理到 http 后端。

2.2 支持 https 和 http 访问

有时现实情况又是灵活的,需要项目同时适配 http 访问和 https 访问,那么就需要再多两步操作,类似于重定向。

① 证书移到 resources 目录

【Java开发】Spring Cloud 11:Gateway 配置 ssl 证书(https、http、域名访问)

② yml 文件中配置 ssl 证书

server:
  port: 443 #https端口,可指定
  # 配置SSL 证书
  ssl:
    key-store : classpath:xxxx.com.jks #ssl文件名称
    key-store-password : xxxx #ssl文件密码
    key-store-type: JKS
    enabled: true

③ http 端口设置:

也是在 yml 文件中配置

http:
  port: 8080 #可指定

④ HttpServer.java

编写该文件以实现用过通过 8080 端口访问即可绕过 https 验证,从而模拟 http 访问。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.netty.NettyReactiveWebServerFactory;
import org.springframework.boot.web.server.WebServer;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.server.reactive.HttpHandler;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Configuration
public class HttpServer {

    @Autowired
    private HttpHandler httpHandler;

    private WebServer webServer;

    @Value("${http.port}")
    private Integer httpPort;

    @PostConstruct
    public void start() {
        NettyReactiveWebServerFactory factory = new NettyReactiveWebServerFactory(httpPort);
        WebServer webServer = factory.getWebServer(httpHandler);
        webServer.start();
    }

    @PreDestroy
    public void stop() {
        webServer.stop();
    }

}

至此配置完成。

2.3 支持 https 或 http 访问

有时微服务中的某个项目可能只需要实行 http 访问,而不需要进行 https 访问,可进行如下配置:

① 证书移到 resources 目录

【Java开发】Spring Cloud 11:Gateway 配置 ssl 证书(https、http、域名访问)

② yml 文件中配置 ssl 证书

server:
  port: 443 #https端口,可指定
  # 配置SSL 证书
  ssl:
    key-store : classpath:xxxx.com.jks #ssl文件名称
    key-store-password : xxxx #ssl文件密码
    key-store-type: JKS
    enabled: true

③ IsSecure 配置

配置中的 service-demo 为服务名称,只需要配置不同服务对应的 IsSecure 值即可支持对应服务的访问方式。

#网关路由配置
spring:
  cloud:
    gateway:
      filter:
      routes:
        - id: service-demo
          uri: lb://service-demo
          predicates:
            - Path=/service-demo/**
          filters:
            - StripPrefix=1

#设置路由转发以https方式转发,true则以https方式转发false以http方式转发
service-demo:
  ribbon:
    IsSecure: true

2.4 服务器域名访问

前提是该服务器与域名已经绑定,同时服务器已开放这两个端口(如果使用 docker ,注意启动项目容器时开放两个端口),那么给 gateway 配置的 ssl 证书就会配合域名生效。就算服务器与域名绑定了,但是项目没有配置 ssl 证书,那么进行域名访问也是不成功的。当然,将域名换成ip地址也是完全可以进行访问的。

① https+域名+端口访问

【Java开发】Spring Cloud 11:Gateway 配置 ssl 证书(https、http、域名访问)

② http+域名+端口访问

【Java开发】Spring Cloud 11:Gateway 配置 ssl 证书(https、http、域名访问)

参考文章:

SpringCloud Gateway网关配置 后端微服务支持http和https调用

springboot安装ssl证书文章来源地址https://www.toymoban.com/news/detail-478348.html

到了这里,关于【Java开发】Spring Cloud 11:Gateway 配置 ssl 证书(https、http、域名访问)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot配置https(SSL证书)

    第一步: 首先得明白什么是wss协议: 可以看这篇文章:WSS、SSL 和 https 之间的关系 第二步: 先拿到ssl证书:我这边是用的阿里云的免费证书具体获取方法如下: 可以参考:阿里云申请免费 SSL证书 https 的图文教程_林中明月间丶-CSDN博客_阿里云申请免费ssl证书 将下载的证书压缩包解

    2024年02月11日
    浏览(48)
  • 配置https---Nginx认证ssl证书

    nginx作为前端的负载均衡服务器已经很熟悉了,项目需要使用https安全的时候就需要认证证书了 dockerweb管理工具 Portainer 如果对docker不那么熟悉可以使用docker 第三方管理端 然后访问本地9000端口,登录后可以管理容器镜像 有了该工具可以直接进入容器查看日志等操作 nginx环境安装

    2024年01月19日
    浏览(53)
  • nginx配置ssl证书使用https访问

    一:申请证书,我使用的是阿里云免费证书 二:下载证书,解压到服务器上 两个文件:www.xx.com.pem和www.xx.com.key 三:打开配置文件/usr/local/nginx/conf/nginx.conf 放开端口443,替换ssl_certificate和ssl_certificate_key为自己证书路径    server {         listen       443 ssl;         server_na

    2024年01月20日
    浏览(60)
  • Apache配置ssl证书-实现https访问

    443为HTTPS服务的默认端口 启用SSL功能,安装mod_ssl.so模块 使用Certbot签发和续费泛域名SSL证书:https://blog.csdn.net/cljdsc/article/details/133461361 vhost的域名配置文件.conf,在目录:/etc/httpd/conf.d HTTP配置: HTTPS配置: HTTP HTTPS 配置 查看配置文件是否正常 重启apache配置

    2024年02月03日
    浏览(52)
  • 【阿里云】申请与配置域名与配置Https(ssl)证书

    网站标识:域名可以唯一地标识一个网站或在线服务,类似于网站的身份证。通过输入域名,用户可以方便地找到并访问特定的网站 简化网址:域名代替了复杂的 IP 地址(如:192.168.0.1),使用户更容易记忆和输入网站地址。例如,www.example.com 代表了一个网站,而不需要记

    2024年02月02日
    浏览(47)
  • Nginx配置ssl证书实现https安全访问

    目录 一、Nginx的安装与配置 安装步骤 二、SSL证书获取 三、Nginx配置 前题条件,拥有服务器与可以解析到该服务器的自己的域名。 若已安装好了Nginx,则需查看自己的Nginx是否开启了SSL的模块功能:  显示如上,则代表ssl功能已开启,否则可能出现以下错误提示: nginx: [emer

    2024年02月15日
    浏览(39)
  • SpringBoot配置SSL证书,开启HTTPS安全访问!!!

    一、前言 二、SpringBoot中配置SSL 1、环境 2、客户端单向认证服务端代码实战-PFX格式的证书 3、HTTP 转HTTPS 通过HTTP协议传输数据,并不会对数据进行加密,所以存在着一定的风险,容易被抓包破解数据,而且现在各种浏览器对使用HTTP协议的网站也会提示不安全。通过将HTTP协议

    2024年02月11日
    浏览(50)
  • Tomcat配置ssl证书(jks类型)实现HTTPS

    certificateKeystoreFile:证书地址,可使用绝对路径,也可以配置相对路径 certificateKeyAlias:生成证书时输入的别名(选填) certificateKeystorePassword:生成证书时输入的密钥,如果没有空着  

    2024年02月03日
    浏览(49)
  • 配置SSL证书后,Nginx的HTTPS 不能正常

    申请ssl证书,配置nginx支持https与证书,可是访问https的nginx总是出现错误,也导致小程序发https请求失败,这是什么原因呢? 如果在配置SSL证书后,Nginx的HTTPS无法正常工作,可能有以下几个常见原因: 1、证书配置错误: 证书文件路径出现错误或不存在;文件格式错误;证书

    2024年02月03日
    浏览(48)
  • 【SpringCloud】11、Spring Cloud Gateway使用Sentinel实现服务限流

    1、关于 Sentinel Sentinel 是阿里巴巴开源的一个流量防卫防护组件,可以为微服务架构提供强大的流量防卫能力,包括流量控制、熔断降级等功能。Spring Cloud Gateway 与 Sentinel 结合,可以实现强大的限流功能。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近

    2024年02月01日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包