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


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

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


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


文章目录

  • 一、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中更新为新的证书。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/786197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转载】OpenCV ECC图像对齐实现与代码演示(Python / C++源码)

发现一个有很多实践代码的git 库,特记录下: 地址:GitHub - luohenyueji/OpenCV-Practical-Exercise: OpenCV practical exercise 作者博客地址:https://blog.csdn.net/LuohenYJ 已关注。 Items项目Resources1age_gender1基于深度学习识别人脸性别和年龄Model2OpenCV_dlib_…

蓝桥杯刷题--python-35-二维记忆搜索有向图中最大环

0小朋友崇拜圈 - 蓝桥云课 (lanqiao.cn) sys.setrecursionlimit(1000000) # 请在此输入您的代码 nint(input()) w[0]list(map(int,input().split())) used[[0,0] for i in range(n1)] def dfs(k): global cnt if used[k][0] and used[k][1]: return if used[k][0] and not use…

CSS3 Transform变形理解与应用

Transform:对元素进行变形; Transition:对元素某个属性或多个属性的变化,进行控制(时间等),类似flash的补间动画。但只有两个关键贞。开始,结束。 Animation:对元素某个属…

Samtec连接器 | 应用分享C-V2X技术在汽车领域的应用

【前言】 在汽车设计领域有一个新的缩写,就是C-V2X。被谈及时,这被称为车辆到X,有时也被称为车辆到万物。前面的 "C "代表蜂窝网络。 这些缩写代表最新的基于车辆应用利用蜂窝通讯网络的电子产品。特别是,正在推出的5G…

电脑win10系统更新后开机很慢,更新win10后电脑开机怎么变慢了

很多用户反映,更新win10后电脑开机怎么变慢了呢?现在动不动就要30几秒,以前都是秒开机的,要怎么设置才能提高开机速度?小伙伴们别着急,主要原因可能是关机设置中没有勾选启用快速启动,或者是开机启动设置的问题&…

实验04_OSPF&RIP选路实验

实验拓扑 IP地址规划 拓扑中的 IP 地址段采用:172.16.AB.X/24。其中 AB 为两台路由器编号组合,例如:R3-R6 之间的 AB 为 36,X 为路由器编号,例如R3 的 X3所有路由器都有一个 loopback 0 接口,地址格式为&…

力扣爆刷第109天之CodeTop100五连刷31-35

力扣爆刷第109天之CodeTop100五连刷31-35 文章目录 力扣爆刷第109天之CodeTop100五连刷31-35一、56. 合并区间二、124. 二叉树中的最大路径和三、19. 删除链表的倒数第 N 个结点四、72. 编辑距离五、93. 复原 IP 地址 一、56. 合并区间 题目链接:https://leetcode.…

在小程序中使用formdata上传数据,可实现多文件上传

1.下载formdata GitHub - zlyboy/wx-formdata: 在小程序中使用formdata上传数据&#xff0c;可实现多文件上传 2. 前端页面 <uni-collapse classcollapse refcollapse><uni-collapse-item v-for"(item, index) in attachmentList":key"index":ti…

【大数据存储】实验1 Hadoop伪分布式安装

实验1 Hadoop伪分布式安装 下载安装虚拟机软件Vmware&#xff0c;下载Ubuntu镜像文件&#xff0c;安装Ubuntu虚拟机 在Ubuntu系统中创建用户 已有用户prx17 更新APT,安装vim 使用vim创建并编辑一个文件 vim hello.c &#xff08;按o键进入编辑模式&#xff09; 源程序 #i…

C# WPF编程-Application类(生命周期、程序集资源、本地化)

C# WPF编程-Application类 应用程序的生命周期创建Application对象应用程序的关闭方式应用程序事件 Application类的任务显示初始界面处理命令行参数访问当前Application对象在窗口之间进行交互 程序集资源添加资源检索资源pack URI内容文件 本地化构建能够本地化的用户界面 每…

蓝桥杯23年第十四届省赛-整数删除|STL优先队列、双向链表

题目链接&#xff1a; 蓝桥杯2023年第十四届省赛真题-整数删除 - C语言网 (dotcpp.com) 0整数删除 - 蓝桥云课 (lanqiao.cn) 学习&#xff1a;蓝桥杯真题讲解&#xff1a;整数删除_蓝桥杯整数删除 c语言-CSDN博客 说明&#xff1a; 在暴力做法里面&#xff0c;每次都要花费…

基于神经网络的人脸识别系统的设计与实现

基于神经网络的人脸识别系统的设计与实现 摘要&#xff1a; 随着计算技术的快速发展&#xff0c;人脸识别已成为身份验证、安全监控等领域的关键技术。本文旨在设计并实现一个基于神经网络的人脸识别系统&#xff0c;该系统能够自动地从输入图像中检测和识别出人脸。论文首先介…

GPT-4智能体:迈向GPT-5的跳板

来自&#xff1a;鸵傲科技开发 在当今这个信息爆炸的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的速度发展&#xff0c;其中自然语言处理&#xff08;NLP&#xff09;领域尤为引人注目。GPT系列模型&#xff0c;作为NLP领域的佼佼者&#xff0c;其每…

php编辑器 ide 主流编辑器的优缺点。phpstorm vscode atom 三者对比

编辑器PhpStormvscodeAtom是否收费收费&#xff0c;有30天试用期免费免费内存占用Java平台&#xff0c;一个进程1G多内存占用好几个进程&#xff0c;合起来1G上下/基本功能都具备&#xff0c;有的功能需要装插件都具备&#xff0c;有的功能需要装插件都具备&#xff0c;有的功能…

机器学习之分层聚类中的概念聚类(Conceptual Clustering)

概念 在分层聚类中,概念聚类指的是通过将数据点分组成具有相似性的概念或类别,并构建一个层次化的结构来表示这些概念之间的关系。这种方法旨在捕捉数据的内在结构,并将数据组织成一个层次化的树状结构,以便更好地理解数据的层次性和相关性。 概念聚类在分层聚类中的主要…

《基础设施即代码(IaC)》译者序

随着信息技术的飞速发展&#xff0c;我们对基础设施的理解也在不断深化。传统的基础设施往往被看作是硬件和软件的堆砌&#xff0c;而现在&#xff0c;基础设施的概念已经发生了巨大的变化。在当今这个信息化、数字化的时代&#xff0c;基础设施已经成为了企业和组织运行的核心…

使用CMake搭建简单的Qt程序

目录结构 代码 CMakeLists.txt&#xff1a; cmake_minimum_required(VERSION 3.15)set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON)# set the project name project(xxx)# 设置Qt的路径 # 例如 E:/Qt/Qt/aaa/msvc2019_64 # aaa 为Qt的版本号 set(QT_PATH…

2024年MathorCup数学建模思路B题思路分享

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

应用案例分享|3D视觉引导汽车铅蓄电池自动化拆垛

在汽车制造及相关配套产业链中&#xff0c;铅蓄电池作为关键零部件之一&#xff0c;其生产和处理环节对效率和精准度都有着极高的要求。传统的铅蓄电池拆垛作业往往依赖于人工操作&#xff0c;不仅效率低下&#xff0c;还存在安全隐患。 项目背景 某大型蓄电池企业&#xff0c…

基于Spring Boot的校园招聘平台设计与实现(附源码+数据库+万字文档+PPT)

基于Spring Boot的校园招聘平台 一、摘要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 毕业生信息招聘平台&#xff0c;主要的模块包括查看管理员&#xff1b;首页、个人中心、企业管理、空中宣…