【Azure APIM】APIM的自建网关如何解决自签名证书的受信任问题呢?(方案三)

news/2026/1/23 19:16:51/文章来源:https://www.cnblogs.com/lulight/p/19523829

问题描述

在先前的四篇博文

1:【Azure APIM】APIM的自建网关如何解决自签名证书的受信任问题呢?(方案二) 

2:【Azure APIM】APIM的自建网关如何解决自签名证书的受信任问题呢?(方案一)  

3:【Azure APIM】如何解决后端API服务配置自签名证书时APIM请求报错500:Error occured while calling backend service 

4:【Azure 环境】在Windows环境中使用OpenSSL生成自签名证书链步骤分享

我们分别介绍了使用OpenSSL生成自签名证书,然后解决APIM服务对自签名证书的信任问题。不论是APIM托管的网关,还是自建的网关都可以通过安装证书后使得请求受信任,通过配置API跳过证书验证环节。

本文这从“自建网关本身AKS POD” 方面入手,通过配置 SSL_CERT_FILE 环境变量,来安装自签名证书 (根证书和中间证书)到POD中。

经过AI大模型解答,在 AKS (Azure Kubernetes Service) 中访问使用自签名证书的 API,关键在于让客户端信任该证书,主要的思路是:

  1. 创建包含 CA 证书的 Secret
  2. 将自签名的 CA 证书文件 (例如 ca.crt) 导入到 AKS 集群
  3. 在应用部署的 YAML 文件中,将该 Secret 挂载到容器内,并设置 SSL_CERT_FILE 环境变量指向该证书

image

操作步骤

第一步:准备好中间证书和根证书合并一起的 .crt 内容

导出方法:通过浏览器导出中间证书+根证书的 crt 文件,其内容是 Base64 编码

image

 

第二步:创建Kubernetes Secret

将自签名的 CA 证书文件 (例如 my-inetr-ca.crt) 导入到 AKS 集群中:

命令:

kubectl create secret generic self-signed-ca --from-file="<the full path of my-inetr-ca.crt>"

结果:

image

 

第三步:在APIM的自建网关Pod中挂载证书

在应用部署的 YAML 文件中,将该 Secret 挂载到容器内,并设置 SSL_CERT_FILE 环境变量指向该证书

...volumeMounts:- name: ca-volumemountPath: /etc/ssl/certs/my-ca.crtsubPath: my-inetr-ca.crtenv:- name: SSL_CERT_FILEvalue: /etc/ssl/certs/my-ca.crt... volumes:- name: ca-volumesecret:secretName: self-signed-ca...

把从APIM获取的部署yaml内容,只修改如图中的三个位置,即可。

image

第四步:部署以上配置,后访问AKS Service External URL进行测试验证

# 部署
kubectl apply -f "<apim self-hosted gateway yaml file>"
#获取对外暴露的IP地址
kubectl get services
 
##测试访问自建网关中的API
curl https://<external ip>/api -k 
测试结果,成功通过证书验证及获取正确的结果:

image

 

如果没有配置SSL_CERT_FILE 及挂载证书,就会遇见500 Internal server error。如果进一步通过 kubectl logs <pod name> 查看GatewayLogs日志,就会发现详细错误:The remote certificate was rejected by the provided RemoteCertificateValidationCallback.

详细错误

[Info] 2026-01-23T07:26:27.251 [DnsResolutionScheduled], message: xselfca02.myxxxxx.com, source: RoundRobinNameResolver
[Info] 2026-01-23T07:26:27.252 [OutgoingTlsProtocolsSet], message: Tls, Tls11, Tls12, source: TcpChannelFactory
[Info] 2026-01-23T07:26:27.598 [CertificateInfoVerificationScheduled], message: thumbprint: 62BF1CFA2116828E3F0B3C7D8FB4C380CD2CE358, subjectName: CN=*.myxxxxx.com, O=My Self Server Org, S=Chongqing, C=CN (CRL URLs: ; AIA URLs: )
[Warn] 2026-01-23T07:26:27.601 [FailedToProcessRequest], ActivityId: d5d383dc-c395-4111-8558-2193f9bbb8ff, correlationId: d5d383dc-c395-4111-8558-2193f9bbb8ff, apiId: 69303f7730caebcf2a534309, operationId: get-home-page, tags: 20, httpMethod: GET, source: request-forwarder, serviceName: apim-gateway, exception: System.Security.Authentication.AuthenticationException: The remote certificate was rejected by the provided RemoteCertificateValidationCallback.
at System.Net.Security.SslStream.SendAuthResetSignal(ReadOnlySpan`1 alert, ExceptionDispatchInfo exception)
at System.Net.Security.SslStream.CompleteHandshake(SslAuthenticationOptions sslAuthenticationOptions)
at System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](Boolean receiveFirst, Byte[] reAuthenticationData, CancellationToken cancellationToken)
at Gateway.Http.Client.DotNetty.TcpChannelFactory.CreateChannelAsync(IPEndPoint endpoint, RequestedApplicationProtocol requestedApplicationProtocol, TlsInfo tlsMetadata, HttpProxy httpProxyMetadata, Int32 destinationPort, CancellationToken cancellationToken) in C:\__w\1\s\Proxy\Gateway.Http.Client.DotNetty\TcpChannelFactory.cs:line 116
at Gateway.Http.Client.DotNetty.EndpointPool.CreateAsyncInternal(IPipelineContext pipelineContext, ChannelPoolKey channelPoolKey, RequestedApplicationProtocol requestedApplicationProtocol, CancellationToken cancellationToken, GateInfo gateInfo) in C:\__w\1\s\Proxy\Gateway.Http.Client.DotNetty\EndpointPool.cs:line 307
at Gateway.Http.Client.DotNetty.EndpointPool.CreateAsync(IPipelineContext pipelineContext, ChannelPoolKey channelPoolKey, RequestedApplicationProtocol requestedApplicationProtocol, CancellationToken cancellationToken) in C:\__w\1\s\Proxy\Gateway.Http.Client.DotNetty\EndpointPool.cs:line 128
at Gateway.Http.Client.DotNetty.SingleThreadedBackendChannelPool.AcquireAsync(IPipelineContext context, CancellationToken cancellationToken) in C:\__w\1\s\Proxy\Gateway.Http.Client.DotNetty\SingleThreadedBackendChannelPool.cs:line 189
at Gateway.Http.Client.DotNetty.RoundRobinBackendChannelPool.Acquire0(Object state) in C:\__w\1\s\Proxy\Gateway.Http.Client.DotNetty\RoundRobinBackendChannelPool.cs:line 73
at Gateway.Http.Client.DotNetty.DotNettyHttpBackend.AcquireChannelAsync(IPipelineContext ctx, CancellationToken cancellationToken) in C:\__w\1\s\Proxy\Gateway.Http.Client.DotNetty\DotNettyHttpBackend.cs:line 791
at Gateway.Http.Client.DotNetty.DotNettyHttpBackend.ProcessAsync(IPipelineContext context, CancellationToken cancellation) in C:\__w\1\s\Proxy\Gateway.Http.Client.DotNetty\DotNettyHttpBackend.cs:line 172
at Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.Policies.PipelineWalker.ExecuteAsync(IPipelineContext context, IEnumerable`1 steps, CancellationToken cancellation) in C:\__w\1\s\Proxy\Gateway.Pipeline\PipelineWalker.cs:line 66
at Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.ChildPipeline.ExecuteAsync(IPipelineContext context, CancellationToken cancellationToken) in C:\__w\1\s\Proxy\Gateway.Pipeline\ChildPipeline.cs:line 35
at Gateway.Pipeline.Extensions.ValueTaskExtensions.Await[T](ValueTask`1 input) in C:\__w\1\s\Proxy\Gateway.Pipeline\Extensions\ValueTaskExtensions.cs:line 28
at Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.Policies.IO.CallServiceHandler.ProcessAsync(IPipelineContext context, CancellationToken cancellation) in C:\__w\1\s\Proxy\Gateway.Policies.General\IO\CallServiceHandler.cs:line 94
at Gateway.Http.Client.DotNetty.SingleThreadedBackendChannelPool.AcquireAsync(IPipelineContext context, CancellationToken cancellationToken) in C:\__w\1\s\Proxy\Gateway.Http.Client.DotNetty\SingleThreadedBackendChannelPool.cs:line 189
at Gateway.Http.Client.DotNetty.RoundRobinBackendChannelPool.Acquire0(Object state) in C:\__w\1\s\Proxy\Gateway.Http.Client.DotNetty\RoundRobinBackendChannelPool.cs:line 73
at Gateway.Http.Client.DotNetty.DotNettyHttpBackend.AcquireChannelAsync(IPipelineContext ctx, CancellationToken cancellationToken) in C:\__w\1\s\Proxy\Gateway.Http.Client.DotNetty\DotNettyHttpBackend.cs:line 791
at Gateway.Http.Client.DotNetty.DotNettyHttpBackend.ProcessAsync(IPipelineContext context, CancellationToken cancellation) in C:\__w\1\s\Proxy\Gateway.Http.Client.DotNetty\DotNettyHttpBackend.cs:line 172
at Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.Policies.PipelineWalker.ExecuteAsync(IPipelineContext context, IEnumerable`1 steps, CancellationToken cancellation) in C:\__w\1\s\Proxy\Gateway.Pipeline\PipelineWalker.cs:line 66
at Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.ChildPipeline.ExecuteAsync(IPipelineContext context, CancellationToken cancellationToken) in C:\__w\1\s\Proxy\Gateway.Pipeline\ChildPipeline.cs:line 35
at Gateway.Pipeline.Extensions.ValueTaskExtensions.Await[T](ValueTask`1 input) in C:\__w\1\s\Proxy\Gateway.Pipeline\Extensions\ValueTaskExtensions.cs:line 28
at Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.Policies.IO.CallServiceHandler.ProcessAsync(IPipelineContext context, CancellationToken cancellation) in C:\__w\1\s\Proxy\Gateway.Policies.General\IO\CallServiceHandler.cs:line 94
at Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.Policies.PipelineWalker.ExecuteAsync(IPipelineContext context, IEnumerable`1 steps, CancellationToken cancellation) in C:\__w\1\s\Proxy\Gateway.Pipeline\PipelineWalker.cs:line 66
at Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.ChildPipeline.ExecuteAsync(IPipelineContext context, CancellationToken cancellationToken) in C:\__w\1\s\Proxy\Gateway.Pipeline\ChildPipeline.cs:line 35
at Gateway.Pipeline.Extensions.ValueTaskExtensions.Await[T](ValueTask`1 input) in C:\__w\1\s\Proxy\Gateway.Pipeline\Extensions\ValueTaskExtensions.cs:line 28
at Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.Policies.PipelineWalker.ExecuteAsync(IPipelineContext context, IEnumerable`1 steps, CancellationToken cancellation) in C:\__w\1\s\Proxy\Gateway.Pipeline\PipelineWalker.cs:line 66
at Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.PipelineExecutor.ExecuteAsync(IPipelineContext context, CancellationToken cancellationToken) in C:\__w\1\s\Proxy\Gateway.Pipeline\PipelineExecutor.cs:line 215, transportError: 0, httpError: 0
[Info] 2026-01-23T07:26:26.678 [GatewayLogs], correlationId: x-x-x-x, isRequestSuccess: false, totalTime: 922, category: "GatewayLogs", callerIpAddress: "x.x.x.x", timeGenerated: 2026-01-23T07:26:26.678, region: "aks", correlationId: "x-x-x-x-x", method: "GET", url: "https://x.x.x.x/xselfca", responseCode: 500, responseSize: 259, cache: "none", backendTime: 920, apiId: "XXXXXXXXXXXXXXXXXXX", operationId: "get-home-page", clientProtocol: "HTTP/1.1", apiRevision: "1", clientTlsVersion: "1.3", backendMethod: "GET", backendUrl: "https://xxx.xxx.com/", lastError: {"elapsed":921,"source":"request-forwarder","path":"forward-request\\forward-request","reason":"BackendConnectionFailure","message":"The remote certificate was rejected by the provided RemoteCertificateValidationCallback.","section":"backend"}, errors: [{"elapsed":921,"source":"request-forwarder","path":"forward-request\\forward-request","reason":"BackendConnectionFailure","message":"The remote certificate was rejected by the provided RemoteCertificateValidationCallback.","section":"backend"}]
[Info] 2026-01-23T07:27:22.895 [InitialDnsNeighborDiscoverySucceeded], message: Successfully resolved IP addresses for DNS name xnewcstest-instance-discovery: 10.244.1.11, source: Neighborhood

 

参考资料

Use custom certificate authorities (CAs) in Azure Kubernetes Service (AKS) : https://learn.microsoft.com/en-us/azure/aks/custom-certificate-authority

 

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

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

相关文章

AI大模型微调指南:告别“炼丹”玄学,用数据与科学打造专属模型

AI大模型微调指南:告别“炼丹”玄学,用数据与科学打造专属模型引言:为什么你需要掌握大模型微调? 在人工智能浪潮中,大型语言模型(LLM)如GPT、LLaMA、通义千问等已展现出惊人的通用能力。然而,你是否曾遇到这样…

安全加固相关内容

安全加固 核心原则为:最小权限原则以及纵深防御 指通过减少攻击面来提高系统安全性的过程。这是一个多层面的工作,通常遵循“纵深防御”(Defense in Depth)的原则,从底层系统到上层应用逐层进行。 以下是通用的安…

2026年优质建筑材料检测服务商推荐与机构选择指南

在建筑材料检测的过程中,有效的内容概要不仅帮助读者快速了解文章脉络,也方便他们掌握核心信息。本篇文章围绕建筑材料检测服务的重要性,提供了对检测机构选择的实用建议。此外,我们将探讨值得信赖的检测服务商,分…

Product Hunt 每日热榜 | 2026-01-23

1. ChartGen AI 标语&#xff1a;几秒钟内将数据转化为专业的图表&#xff0c;获取深刻见解。 介绍&#xff1a;来自Ada.im团队的ChartGen AI是一款智能图表生成器&#xff0c;它可以将原始数据转化为节省成本的洞察。这个工具特别帮助在线营销人员将来自不同平台的数据&…

FPGA教程系列-Vivado Aurora 8B/10B IP核接口解析 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

TB132FU原厂刷机包免费下载_CN_ZUI_16

原厂刷机包下载 https://pan.quark.cn/s/7bcaee17dad9联想平板小新Pad Pro 2022 11.2英寸 平板电脑原厂刷机包下载 转载请标注来源:https://www.cnblogs.com/mianfeijiaocheng/p/19523822 所有固件都是我手动上传的,…

2026年磁铁厂家推荐排行榜:铁氧体/钕铁硼/无线充/耐高温/单面/瓦形/沉头孔/方形/圆形/异形/圆环磁铁,源头实力与创新应用深度解析

2026年磁铁厂家推荐排行榜:铁氧体/钕铁硼/无线充/耐高温/单面/瓦形/沉头孔/方形/圆形/异形/圆环磁铁,源头实力与创新应用深度解析 磁性材料作为现代工业的“隐形骨骼”,其性能与品质直接关系到下游终端产品的可靠性…

如何进行员工绩效评估

帕特里夏金(Patricia King)在她的《绩效计划与评估》一书中指出,法律要求绩效评估必须:与工作相关且有效;基于对工作的透彻分析;为所有员工标准化;不偏against任何种族,肤色,性别,宗教或国籍;并由对该人或工…

区块链去中心化存储的Prompt工程:提示工程架构师的数据管理

区块链去中心化存储与Prompt工程协同&#xff1a;提示架构师的数据管理实践指南 一、引言&#xff1a;当Prompt工程遇到数据存储的“阿喀琉斯之踵” 假设你是一位资深的Prompt工程架构师&#xff0c;正在为某大型AI模型设计用户意图理解的提示策略。为了让Prompt更精准&#…

Ubuntu 上搜狗输入法突然“消失 / 只能英文”的排查与修复教程

Ubuntu 上搜狗输入法突然“消失 / 只能英文”的排查与修复教程 适用场景&#xff1a;Ubuntu 桌面系统里原本装了搜狗输入法&#xff08;Sogou Pinyin&#xff09;&#xff0c;突然只能输入英文&#xff1b;找不到切换快捷键&#xff1b;输入法图标不见或无法切换到中文。 典型原…

亲测好用10个AI论文平台,助你轻松搞定本科生毕业论文!

亲测好用10个AI论文平台&#xff0c;助你轻松搞定本科生毕业论文&#xff01; AI 工具助力论文写作&#xff0c;轻松应对学术挑战 在当前的学术环境中&#xff0c;越来越多的学生开始借助 AI 工具来提升论文写作效率。无论是降低 AIGC 率&#xff0c;还是保持语义通顺&#xff…

2026研究生必备10个降AI率工具

2026研究生必备10个降AI率工具 AI降重工具&#xff1a;让论文更“自然”的秘密武器 随着人工智能技术的广泛应用&#xff0c;越来越多的研究生在撰写论文时不得不面对一个现实问题——AIGC率过高。这不仅影响论文的原创性评估&#xff0c;还可能对最终成绩产生负面影响。而AI降…

深入解析:【要闻周报】网络安全与数据合规 11-21

深入解析:【要闻周报】网络安全与数据合规 11-21pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

2026年 印刷机厂家推荐排行榜:丝网印刷机/线路板印刷机/全自动印刷机/CCD全自动印刷机/亚克力印刷机/大尺寸印刷机,高精度与高效能智造之选

2026年印刷机厂家推荐排行榜:丝网印刷机/线路板印刷机/全自动印刷机/CCD全自动印刷机/亚克力印刷机/大尺寸印刷机,高精度与高效能智造之选 在全球制造业持续向智能化、精密化转型的浪潮下,印刷设备作为电子制造、光…

Spark机器学习库MLlib:大数据AI应用开发指南

Spark机器学习库MLlib:大数据AI应用开发指南 1. 引入与连接 1.1 引人入胜的开场 想象一下,你身处一家大型电商公司,每天都有海量的用户行为数据涌入,包括用户的浏览记录、购买历史、搜索关键词等。公司想要精准地预测用户的购买倾向,以便推送个性化的商品推荐,从而提高…

深度测评自考必备AI论文平台TOP10

深度测评自考必备AI论文平台TOP10 自考论文写作工具测评&#xff1a;2026年TOP10榜单出炉 随着自考人数逐年攀升&#xff0c;论文写作成为众多考生面临的共同难题。从选题构思到文献检索&#xff0c;再到格式规范与查重修改&#xff0c;每一步都可能成为“卡壳点”。为帮助自考…

收藏!不降级也能用:LangChain 1.0+替代doctran实现问答转换,附完整代码详解

本文介绍了如何在LangChain 1.0环境中替代doctran的"问答转换"功能&#xff0c;通过使用QATransformer或OpenAIQATransformer实现文档→问答对。文章提供了具体代码示例&#xff0c;展示如何用LangChain原生组件替代doctran&#xff0c;无需降级环境即可保留LangChai…

【收藏必备】AI大模型工程架构深度指南:Skill、Agent与Workflow实战干货,建议反复研读

文章深入解析AI应用工程架构三大核心&#xff1a;Skill封装领域解决能力&#xff0c;Agent通过ReAct循环实现复杂任务自动推演&#xff0c;Workflow以DAG或状态图编排多Agent实现确定性流程控制。同时探讨结构化输出与自动化评估等工程化挑战&#xff0c;为构建高效AI应用提供技…

收藏!工业级RAG系统与Agent应用开发实战:从ChatBot到AI架构师的蜕变之路,助你跨越从演示到生产的鸿沟

传统ChatBot存在架构认知局限&#xff0c;难以实现生产级应用。AgenticRAG通过理解、推理、验证实现完整认知闭环&#xff0c;Agent作为AI应用层操作系统决定应用可靠性。深蓝学院推出实战课程&#xff0c;由商汤科技研究员授课&#xff0c;提供系统视角和工程实战&#xff0c;…

深入解析:事务隔离级别终极指南:从脏读到串行化的并发控制艺术

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …