微服务引擎MSE

使用云原生网关实现后端双向TLS认证

2025-06-11 03:09:24

云原生网关作为代理服务接收下游服务(DownStream)请求,并转发到上游服务(Upstream);对于上游服务来说,云原生网关收敛了外部的请求,统一经过网关转发到上游。从安全角度考虑,上游服务可以添加认证鉴权规则实现对网关的身份认证和访问鉴权,确保上游服务安全性;其中一种实现方式就是在上游服务配置TLS策略,要求网关转发请求时提供客户端证书,实现对网关的身份认证,具体流程如下:


云原生网关支持配置证书,用于实现请求后端服务时服务端对网关的证书认证,本文说明具体配置流程。


前提条件

1. 部署后端HTTPS服务,并配置要求请求客户端提供证书

2. 已开通云原生网关实例

 

部署后端服务

我们采用云容器引擎容器引擎部署后端服务,镜像采用我们的demo应用(已配置证书,并要求客户端请求时提供证书),部署完成后在云容器引擎控制台可以看到容器启动:

 

还需要部署关联到工作负载的Service,用于暴露工作负载,如下:

 

使用云原生网关配置路由转发

首先进入云原生网关控制台 服务来源 菜单下,添加云容器引擎服务来源,选择我们部署了后端服务的云容器引擎集群,添加完成后如下所示:

 

进入 服务列表 -> 创建服务 功能,选择从容器创建后端服务,选择我们部署的命名空间和服务,服务协议选择HTTPS(暂时先关闭mTLS选项),如下:

 

创建完成后,服务如下:

 

进入 路由配置 -> 创建路由 页面,配置路由转发规则(匹配路径/api/1/reviews,请求转发到上面创建的服务)如下:

 

结果验证

通过云原生网关访问接口 http://192.168.4.96:27151/api/1/reviews

curl http://192.168.4.96:27151/api/1/reviews -sv

*   Trying 192.168.4.96:27151...

* Connected to 192.168.4.96 (192.168.4.96) port 27151 (#0)

> GET /api/1/reviews HTTP/1.1

> Host: 192.168.4.96:27151

> User-Agent: curl/7.71.1

> Accept: */*

>

* Mark bundle as not supporting multiuse

< HTTP/1.1 502 Bad Gateway

< Date: Tue, 30 Jan 2024 08:07:10 GMT

< Content-Type: text/html; charset=utf-8

< Content-Length: 154

< Connection: keep-alive

<

<html>

<head><title>502 Bad Gateway</title></head>

<body>

<center><h1>502 Bad Gateway</h1></center>

<hr><center>openresty</center>

</body>

</html>

* Connection #0 to host 192.168.4.96 left intact

 

可以看到请求报错了,后台查看debug日志可以看到错误信息如下(SSL握手报错):

sslv3 alert bad certificate:SSL alert number 42) while SSL handshaking to upstream

 

mTLS证书配置&验证

进入 服务列表 菜单,编辑刚才创建的服务,开启服务mTLS认证并上传相关证书,如下:

 

保存后再次请求接口,可以看到返回了正确的结果:

curl http://192.168.4.96:27151/api/1/reviews -sv

*   Trying 192.168.4.96:27151...

* Connected to 192.168.4.96 (192.168.4.96) port 27151 (#0)

> GET /api/1/reviews HTTP/1.1

> Host: 192.168.4.96:27151

> User-Agent: curl/7.71.1

> Accept: */*

>

* Mark bundle as not supporting multiuse

< HTTP/1.1 200

< Content-Type: application/json

< Transfer-Encoding: chunked

< Connection: keep-alive

< Date: Tue, 30 Jan 2024 08:13:57 GMT

<

* Connection #0 to host 192.168.4.96 left intact

[{"id":1,"productId":1,"reviewer":"Reviewer1","text":"This is the 1st reviewer"}]


SY75SVhQvkVu