『Apisix安全篇』APISIX 加密传输实践:SSL/TLS证书的配置与管理实战指南

本文主要是介绍『Apisix安全篇』APISIX 加密传输实践:SSL/TLS证书的配置与管理实战指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


🚀『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】


📣读完这篇文章里你能收获到

  • 🌟 了解SSL/TLS证书对于网络通信安全的重要性和基础概念。
  • 🔧 掌握在APISIX中配置SSL/TLS证书的基本步骤和方法。
  • 📝 学习如何通过修改监听端口,使HTTPS请求更加便捷。
  • 🛠️ 认识如何灵活管理SSL/TLS协议版本,以适应不同的客户端需求。

文章目录

  • 一、SSL/TLS的重要性
  • 二、APISIX中的SSL/TLS配置
    • 2.1 准备SSL/TLS证书
    • 2.2 配置APISIX监听器
      • 2.2.1 单一域名
      • 2.2.2 泛域名
      • 2.2.3 Dashboard配置
    • 2.3 创建路由
    • 2.4 验证配置
  • 三、修改监听端口避免请求域名需要带端口
    • 3.1 修改端口监听配置
    • 3.2 重新加载Apisxi配置
    • 3.3 验证配置
    • 3.4 注意事项
  • 四、SSL 协议
    • 4.1 ssl_protocols 配置
      • 4.1.1 静态配置
      • 4.1.2 动态配置
    • 4.2 注意事项
    • 4.3 使用示例
      • 4.3.1 指定 TLSv协议
  • 五、管理SSL/TLS证书

一、SSL/TLS的重要性

在深入了解APISIX的SSL/TLS配置之前,我们首先要认识到SSL/TLS证书的重要性。SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是确保网络通信安全的加密协议。它们能够为客户端与服务器之间的数据传输提供加密、身份验证和数据完整性保护。在当今这个对网络安全要求日益严格的时代,SSL/TLS证书已经成为了网站安全的标准配置。

二、APISIX中的SSL/TLS配置

APISIX提供了灵活的SSL/TLS配置选项,让我们可以轻松地为API服务启用HTTPS。以下是配置SSL/TLS证书的基本步骤

2.1 准备SSL/TLS证书

首先,需要获取一个SSL/TLS证书。这可以通过向证书颁发机构(CA)申请或使用Let’s Encrypt等免费服务来完成。获取证书后,您将得到一个证书文件(通常为.crt或.pem格式)和一个私钥文件(通常为.key格式)。

  • cert:SSL 密钥对的公钥,pem 格式
  • key:SSL 密钥对的私钥,pem 格式
  • snis:SSL 证书所指定的一个或多个域名,注意在设置这个参数之前,你需要确保这个证书对应的私钥是有效的。

2.2 配置APISIX监听器

2.2.1 单一域名

  • Admin API配置示例
curl http://127.0.0.1:9180/apisix/admin/ssls/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{"cert" : "'"$(cat t/certs/apisix.crt)"'","key": "'"$(cat t/certs/apisix.key)"'","snis": ["test.com"]
}'

2.2.2 泛域名

一个 SSL 证书的域名也可能包含泛域名,如 *.test.com,它代表所有以 test.com 结尾的域名都可以使用该证书。比如 *.test.com,可以匹配 www.test.com、mail.test.com。
以下是在 APISIX 中配置泛域名 SNI 的 SSL 证书的示例。

curl http://127.0.0.1:9180/apisix/admin/ssls/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{"cert" : "'"$(cat t/certs/apisix.crt)"'","key": "'"$(cat t/certs/apisix.key)"'","snis": ["*.test.com"]
}'

2.2.3 Dashboard配置

在APISIX Dashboard中,您可以按照以下步骤操作:

  1. 进入“证书”部分。
  2. 点击“创建”按钮。
  3. 方式选“上传”

image.png

2.3 创建路由

curl http://127.0.0.1:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
{"uri": "/get","hosts": ["test.com"],"methods": ["GET"],"upstream": {"type": "roundrobin","nodes": {"httpbin.org": 1}}
}'

2.4 验证配置

配置完成后,您可以通过发送一个HTTPS请求来验证SSL/TLS是否已成功启用。例如,使用curl命令:

curl --resolve 'www.test.com:9443:127.0.0.1' https://www.test.com:9443/get -k -vvv

三、修改监听端口避免请求域名需要带端口

在配置APISIX的SSL/TLS支持时,我们通常会涉及到监听端口的设置。默认情况下,APISIX的HTTPS监听器会使用9443、9080端口,而HTTP监听器可能使用80端口,HTTPS使用443。

3.1 修改端口监听配置

 sudo vi /usr/local/apisix/conf/config-default.yaml
sudo sed -i '/- 9080/a \    - 80' /usr/local/apisix/conf/config-default.yaml

image.png

sudo sed -i '/- port: 9443/a \enable_http2: true \- port: 443' /usr/local/apisix/conf/config-default.yaml

image.png

3.2 重新加载Apisxi配置

sudo apisix reload

3.3 验证配置

配置完成后,您可以通过发送一个HTTPS请求来验证是否已成功启用。例如,使用curl命令:

curl --resolve 'www.test.com:127.0.0.1' https://www.test.com/get -k -vvv

3.4 注意事项

在实际部署中,我们可能需要根据环境或需求来修改这些端口。此外,如果你打算在同一台服务器上同时部署APISIX和Nginx,端口冲突是需要特别注意的问题。

四、SSL 协议

APISIX 支持 TLS 协议,还支持动态的为每一个 SNI 指定不同的 TLS 协议版本。
为了安全考虑,APISIX 默认使用的加密套件不支持 TLSv1.1 以及更低的版本。 如果你需要启用 TLSv1.1 协议,请在 config.yaml 的配置项 apisix.ssl.ssl_ciphers 增加 TLSv1.1 协议所支持的加密套件。

4.1 ssl_protocols 配置

4.1.1 静态配置

静态配置中 config.yaml 的 ssl_protocols 参数会作用于 APISIX 全局,但是不能动态修改,仅当匹配的 SSL 资源未设置 ssl_protocols,静态配置才会生效。

apisix:ssl:ssl_protocols: TLSv1.2 TLSv1.3 # default TLSv1.2 TLSv1.3

4.1.2 动态配置

使用 ssl 资源中 ssl_protocols 字段动态的为每一个 SNI 指定不同的 TLS 协议版本。
指定 test.com 域名使用 TLSv1.2 TLSv1.3 协议版本:

{"cert": "$cert","key": "$key","snis": ["test.com"],"ssl_protocols": ["TLSv1.2","TLSv1.3"]
}

4.2 注意事项

  • 动态配置优先级比静态配置更高,当 ssl 资源配置项 ssl_protocols 不为空时 静态配置将会被覆盖。
  • 静态配置作用于全局需要重启 apisix 才能生效。
  • 动态配置可细粒度的控制每个 SNI 的 TLS 协议版本,并且能够动态修改,相比于静态配置更加灵活。

4.3 使用示例

4.3.1 指定 TLSv协议

存在一些老旧的客户端,仍然采用较低级别的 TLSv1.1 协议版本,而新的产品则使用较高安全级别的 TLS 协议版本。如果让新产品支持 TLSv1.1 可能会带来一些安全隐患。为了保证 API 的安全性,我们需要在协议版本之间进行灵活转换。 例如:test.com 是老旧客户端所使用的域名,需要将其配置为 TLSv1.1 而 test2.com 属于新产品,同时支持了 TLSv1.2,TLSv1.3 协议。

  1. 为 test.com 域名指定 TLSv1.1 协议版本。
curl http://127.0.0.1:9180/apisix/admin/ssls/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{"cert" : "'"$(cat server.crt)"'","key": "'"$(cat server.key)"'","snis": ["test.com"],"ssl_protocols": ["TLSv1.1"]
}'
  1. 为test2.com域名指定TLSv1.2TLSv1.3协议版本。
curl http://127.0.0.1:9180/apisix/admin/ssls/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{"cert" : "'"$(cat server2.crt)"'","key": "'"$(cat server2.key)"'","snis": ["test2.com"],"ssl_protocols": ["TLSv1.2""TLSv1.3"]
}'
  1. 访问验证,使用 TLSv1.3 访问 test.com 失败:
$ curl --tls-max 1.3 --tlsv1.3  https://test.com:9443 -v -k -I

五、管理SSL/TLS证书

在APISIX中管理SSL/TLS证书同样简单。无论是证书的更新、续期还是吊销,都可以通过Admin API或Dashboard来完成。

  • 更新证书:当证书到期或需要更换时,您可以通过Admin API或Dashboard上传新的证书文件和私钥。
  • 续期证书:对于使用自动续期服务的证书,如Let’s Encrypt,您无需手动续期。对于其他证书,您需要在到期前联系CA进行续期。
  • 吊销证书:如果证书私钥泄露,您应立即吊销证书,并在APISIX中更新为新的证书。

这篇关于『Apisix安全篇』APISIX 加密传输实践:SSL/TLS证书的配置与管理实战指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/855195

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper