当前位置: 首页 > news >正文

如何利用客户端双向TLS认证保护云上应用安全

双向TLS(mTLS)通过要求服务器和客户端双方使用数字证书来验证彼此身份,从而扩展了传统TLS的安全性。常规的TLS只会验证服务器的身份(如大家的浏览器在验证网站时的场景),而mTLS确保在任何数据交换发生之前,双方都对彼此持有信任。在本文中,我们将探讨如何在云端,利用亚马逊云科技服务实现双向mTLS的客户端。

本文介绍

双向TLS(mTLS)技术在保护客户端与服务器之间敏感数据的数据传输方面正变得愈发重要。本文将介绍如何在与外部API端点进行通信的应用程序中开启mTLS的方法。

mTLS实现的具体步骤

  • 客户端应用程序需要使用mTLS连接到API端点
  • 服务器要求客户端在进行API连接时使用mTLS
  • 客户端必须为该连接获取合适的证书

客户端侧应用介绍

  • 常见部署方式: 应用程序运行在亚马逊云科技EKS/ECS/EC2上
  • 需要考虑的因素: 证书管理、证书轮换以及部署。

云端开启mTLS的前提条件

  • 根据服务器的证书要求创建客户端SSL证书。

在云端设置mTLS的两种方案

方案1:端到端直接在服务器中配置mTLS

1. 首先需要根据服务器端的证书生成客户端证书

2. 在Amazon Secret Manager秘钥存储服务中安全地存储证书

- 避免存储在附加到虚拟机的持久化存储硬盘中

- 使用安全的密钥管理服务Amazon Secret Manager在运行时动态检索证书

3. 配置客户端应用程序加载证书以使用mTLS

- 这需要在API调用中通过客户端代码来实现mTLS

示例基础设施创建Python CDK代码

from aws_cdk import (aws_secretsmanager as secretsmanager,Stack,SecretValue,
)
from constructs import Constructclass ClientCertSecretStack(Stack):def __init__(self, scope: Construct, id: str, **kwargs) -> None:super().__init__(scope, id, **kwargs)# Replace the content below with your actual client certificateclient_cert = """-----BEGIN CERTIFICATE----------END CERTIFICATE-----"""# Create a secret in AWS Secrets Manager to store the client certificateclient_cert_secret = secretsmanager.Secret(self, "ClientCertSecret",secret_name="ClientCertificate",description="Client certificate for mTLS authentication",secret_string_value=SecretValue.plain_text(client_cert))

方法2:使用API Gateway作为mTLS的网关代理

1. 创建并设置API Gateway,使其充当外部API端点的网关代理。

2. 在API Gateway上配置mTLS相关设置。

3. 在客户端应用程序中配置使其与API Gateway进行通信。

4. 由API Gateway处理与外部服务之间的mTLS连接。

该方案优势:

对现有应用程序代码的改动最小。

能够集中管理所有后端服务的mTLS连接。

示例基础设施创建Python CDK代码

from aws_cdk import (aws_apigateway as apigw,aws_certificatemanager as acm,Stack,
)
from constructs import Constructclass MtlsApiGatewayStack(Stack):def __init__(self, scope: Construct, id: str, **kwargs) -> None:super().__init__(scope, id, **kwargs)# Create or import an ACM certificate for the custom domain.# Replace "api.example.com" with your actual domain.domain_cert = acm.Certificate(self, "DomainCert",domain_name="api.example.com",validation=acm.CertificateValidation.from_dns()  # Uses DNS validation)# Create a custom domain for API Gateway with mutual TLS settings.# The truststore_uri should point to an S3 object that stores your trust certificate.domain = apigw.DomainName(self, "CustomDomain",domain_name="api.example.com",certificate=domain_cert,endpoint_type=apigw.EndpointType.REGIONAL,security_policy=apigw.SecurityPolicy.TLS_1_2,mutual_tls_authentication=apigw.MutualTlsAuthentication(truststore_uri="s3://my-bucket/truststore.pem",  # Update with your S3 bucket and objecttruststore_version="1"  # Optional version string for the truststore))# Create an API Gateway REST API using the custom domain.api = apigw.RestApi(self, "MtlsApi",rest_api_name="MTLS API",domain_name=domain)# Add a simple GET method on the root resource for demonstration.api.root.add_method("GET",apigw.MockIntegration(integration_responses=[{"statusCode": "200","responseTemplates": {"application/json": '{"message": "Hello, mTLS!"}'}}],passthrough_behavior=apigw.PassthroughBehavior.NEVER,request_templates={"application/json": '{ "statusCode": 200 }'}),method_responses=[{"statusCode": "200"}])

结论

通过mTLS可在客户端和服务器之间实现双向身份验证,从而提升API通信的安全性。请选择最适合大家的架构解决方案与基础设施运维和安全设计的方法。总的来说,本文详细说明了在客户端实现mTLS的重要性、可能面临的部署场景,以及针对不同需求提供了两种具体方案。希望通过本文,大家能够在保护API通信安全方面有更清晰的思路与可行路径。

相关文章:

如何利用客户端双向TLS认证保护云上应用安全

双向TLS(mTLS)通过要求服务器和客户端双方使用数字证书来验证彼此身份,从而扩展了传统TLS的安全性。常规的TLS只会验证服务器的身份(如大家的浏览器在验证网站时的场景),而mTLS确保在任何数据交换发生之前,双方都对彼此持有信任。在本文中&am…...

nlp第十节——LLM相关

一、模型蒸馏技术 本质上是从一个大模型蒸馏出小模型,从小模型训练出来的概率分布(如自回归模型预测下一个字的概率分布)分别与大模型预测的概率分布和ground label求loss。与大模型预测的概率分布用KL散度求loss,与ground label用…...

T-SQL 语言基础: SQL 数据库对象元数据及配置信息获取

目录 介绍目录视图 获取表和架构名称获取列信息 信息架构视图 获取表信息获取列信息 系统存储过程和函数 获取对象列表获取对象详细信息获取约束信息获取数据库属性信息 总结引用 介绍 在 SQL 数据库管理中,获取数据库对象的元数据信息是至关重要的。元数据提供了…...

ue5 创建多列StreeView的方法与理解

创建StreeView的多列样式怎么就像是创建单行单列差不多?貌似就是在单行单列中加入了多列widget? 示例代码 DetailTabWidget #pragma once #include "TreeViewItemBase.h"class SDetailTabWidget : public SCompoundWidget {SLATE_BEGIN_ARGS(SDetailT…...

C# OnnxRuntime部署DAMO-YOLO香烟检测

目录 说明 效果 模型信息 项目 代码 下载 参考 说明 效果 模型信息 Model Properties ------------------------- --------------------------------------------------------------- Inputs ------------------------- name:input tensor:Floa…...

陕西省地标-DB61/T 1121-2018 政务服务中心建设和运营规范

揭秘陕西省智慧政务服务中心新标准:打造高效便捷的服务新体验 随着信息化时代的深入发展,智慧政务已成为提升政府服务效率、优化营商环境的重要举措。陕西省作为全国政务改革的先行者,近期颁布了《陕西省地标-DB61_T 1121-2018 政务服务中心…...

UDP协议(20250303)

1. UDP UDP:用户数据报协议(User Datagram Protocol),传输层协议之一(UDP,TCP) 2. 特性 发送数据时不需要建立链接,节省资源开销不安全不可靠的协议 //一般用在实时性比较高…...

【四.RAG技术与应用】【12.阿里云百炼应用(下):RAG的云端优化与扩展】

在上一篇文章中,我们聊了如何通过阿里云百炼平台快速搭建一个RAG(检索增强生成)应用,实现文档智能问答、知识库管理等基础能力。今天咱们继续深入,聚焦两个核心问题:如何通过云端技术优化RAG的效果,以及如何扩展RAG的应用边界。文章会穿插实战案例,手把手带你踩坑避雷。…...

Docker新手入门(持续更新中)

一、定义 快速构建、运行、管理应用的工具。 Docker可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用。 所谓镜像,就是将应用所需的函数库、依赖、配置等应用一起打包得到的。 所谓容器,为每个镜像的应用进程创建…...

【星云 Orbit • STM32F4】08. 用判断数据头来接收据的串口通用程序框架

【星云 Orbit • STM32F4】08. 用判断数据头来接收据的串口通用程序框架 1. 引言 本教程旨在帮助嵌入式开发小白从零开始,学习如何在STM32F407微控制器上实现一个基于串口的数据接收程序。该程序能够通过判断数据头来接收一串数据,并将其存储到缓冲区中…...

HSPF 水文模型建模方法与案例分析实践技术应用

在水文模拟领域,HSPF 模型(Hydrological Simulation Program Fortran)与 SWAT 模型一样,都是备受瞩目的水文模型软件。HSPF 模型因其强大的功能和简便的操作,在全球范围内得到了广泛应用。该模型不仅能够在缺乏测量数据…...

设置 CursorRules 规则

为什么要设置CursorRules? 设置 CursorRules 可以帮助优化代码生成和开发流程,提升工作效率。具体的好处包括: 1、自动化代码生成 :通过定义规则,Cursor 可以根据你的开发需求自动生成符合规定的代码模板&#xff0c…...

人工智能AI在汽车设计领域的应用探索

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活…...

《当AI生成内容遭遇审核:需求与困境的深度剖析》:此文为AI自动生成

AI 内容审核:数字时代的守门人 在当今数字技术迅猛发展的浪潮中,AI 在内容生成领域取得了令人瞩目的成就,成为了推动创新与变革的核心力量。以 AI 绘画为例,从早期简单粗糙的图像生成,到如今能够创作出细节丰富、风格多…...

【无人机与无人车协同避障】

无人机与无人车协同避障的关键在于点云数据的采集、传输、解析及实时应用,以下是技术实现的分步解析: 1. 点云数据采集(无人机端) 传感器选择: LiDAR:通过激光雷达获取高精度3D点云(精度达厘米…...

ComfyUI AnimeDiff动画参数总结

ComfyUI AnimeDiff动画参数总结 一、动画生成核心参数 参数名称建议值/范围作用说明备注步数(Steps)15-25控制AI计算迭代次数,越高细节越精细,但耗时更长推荐20步,显存不足可降至15步CFG值7.0-8.5提示词对画面的控制…...

No manual entry for printf in section 3

问题描述 在尝试查看 printf 的 C 函数手册页(即 man 3 printf)时遇到了 “No manual entry for printf in section 3” 的错误信息。 解决方案 出现这问题,是由于系统上没有安装对应的部分的手册页,因此安装对应的部分的手册…...

React 之 Redux 第二十八节 学习目标与规划大纲及概要讲述

接下来 开始Redux 全面详细的文档输出,主要基于一下几个方面,欢迎大家补充指正 一、Redux 基础概念 为什么需要 Redux? 前端状态管理的挑战(组件间通信、状态共享) Redux 解决的问题:集中式、可预测的状态…...

OSPF路由ISIS路由与路由学习对比(‌OSPF vs ISIS Routing Learning Comparison)

OSPF路由ISIS路由与路由学习对比 1.OSPF 路由学习规律 OSPF使用链路状态数据库(Link State Database)来存储网络拓扑信息。每个OSPF路由器通过交换链路状态更新(Link State Updates)来了解整个网络的拓扑,并根据收到…...

PMP项目管理—资源管理篇—1.规划资源管理

文章目录 基本信息4W1HITTO输入工具与技术输出 三种组织结构图和职位描述组织分解结构 OBS职责分派矩阵 RAMRACI矩阵说明 文本格式 资源管理计划团队章程 基本信息 4W1H what: 规划资源管理是定义如何估算、获取、管理和利用端对以及实物资源的过程。why: 资源规划用于确定和…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...