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

简介: 本文介绍在Azure API管理(APIM)中使用自签名证书时,因CA证书不受信任导致后端HTTPS连接失败的问题及解决方案。通过分析错误日志和验证流程,指出需将根CA和中间CA证书分别上传至APIM的受信任证书库,并强调仅上传完整链PFX文件无效。最终按正确步骤上传CER格式的CA证书后,问题得以解决,实现安全通信。

问题描述

在博文“【Azure 环境】在Windows环境中使用OpenSSL生成自签名证书链步骤分享”,我们通过OpenSSL已经创建了自签名证书PFX文件。

当把证书配置到后端API服务,并且通过APIM作为服务对外提供的网关入口后,发现客户端请求发送到APIM,但是APIM访问后端服务器时候,无法建立Https连接。报错500。

访问流图

错误信息

forward-request (356.754 ms)
{
    "messages": [
        "Error occured while calling backend service.",
        "The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.",
        "The remote certificate is invalid according to the validation procedure."
    ]
}

在开启APIM调试Trace后,可见错误信息

面对这个问题,需要如何解决呢?

 

问题解答

因为浏览器发起HTTPS请求后,服务器会返回它的证书信息到客户端进行验证。但由于使用的自签名证书的根CA,中间证书都不是受信任机构所颁发的证书,所以在操作系统中没有内置CA信息,所以被浏览器认为这是不受信任的证书。就直接中断连接,返回net::ERR_CERT_AUTHORITY_INVALID 错误。

HTTPS证书验证流程图:

当CA证书不受信任的时候,浏览器报错如下

Your connection is not private

Attackers might be trying to steal your information from lbca.mylubu.com (for example, passwords, messages, or credit cards).

Learn more about this warning net::ERR_CERT_AUTHORITY_INVALID

Subject: *.mylubu.com


Issuer: My Self Intermediate CA


Expires on: Feb 29, 2028


Current date: Jan 17, 2026


PEM encoded chain:

-----BEGIN CERTIFICATE-----

MIIE3zCCAsegAwIBAgIUVoVVHuMRMxqelxTsX4OPtc3EnuUwDQYJKoZIhvcNAQEL

BQAwYTELMAkGA1UEBhMCQ04xEDAO
......

SxmYHLkIM/VbtjWKixl7mKltQMwbUvRMW+vOkZu/ibEtyG+OfGBIA9InKqE0BSng

HNIRYgeO7r1AfMtLHUCy+RmC6AueslBWqdSminThQD8HbY+YvGFU9/zduVRY/Uic

3wFr

-----END CERTIFICATE-----

如果对于本地客户端,解决方案就是把完整证书链的服务器证书PFX安装到本地就可以。当本地证书库中包含了这个服务器证书的中间证书,根证书后,浏览器访问就会被信任。

但是在APIM服务上,应该如何处理呢?

根据官方文档 “如何在 Azure API 管理中添加自定义 CA 证书”的介绍,APIM服务支持上传CA证书。

 

在AIPM的证书管理页面,因为我们的服务器证书是一张包含根证书,中间证书,服务器证书的完整证书链证书,所以心想,是否可以直接上转这一张证书就可以了呢?

实验证明,不可以!

错误实验第一步:上传服务器证书到CA Certificates

错误实验第二步:访问APIM接口,错误依旧

正确实验,按照要求,先后上传了根CA,中间CA证书。再次访问APIM接口,获取200返回,问题解决,自签名证书验证成功。

注意:在上传证书页面,只支持cer和pfx格式证书(File extension for rootCA.crt is not present in the allowed file extensions list - "cer,pfx")。所以openSSL生成的.crt 证书可以通过Windows中双击打开文件后,选择导出为CER证书。

1: 双击 rootCA.crt

2: 选择 Details 项

3: 点击Copy to File 按钮,在弹出的窗口中直接点击Next

4: 默认选择第一个 DER encoded binary X.509 (.CER)

5: 点击 Next, 在新一个窗口中选择 CER文件的保存路径。

 

 

 

参考资料

在Windows环境中使用OpenSSL生成自签名证书链步骤分享 : https://www.cnblogs.com/lulight/p/19479238

如何在 Azure API 管理中添加自定义 CA 证书 : https://docs.azure.cn/zh-cn/api-management/api-management-howto-ca-certificates

 



当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

相关文章
|
3月前
|
安全 API 网络架构
【Azure APIM】APIM的自建网关如何解决自签名证书的受信任问题呢?(方案一)
本文详解在Azure APIM自建网关部署于AKS时,如何解决HTTPS自签名证书不被信任的问题。通过上传根/中间证书、调用REST API标记为可信,实现POD内证书信任,确保后端服务安全通信。
110 2
|
26天前
|
存储 网络协议 Linux
【Azure Container App】Debug Console的调试工具试验(二)-- lsof/ util-linux / netcat / wget
本文续讲Azure Container App Debug Console调试工具试验,详解lsof(端口/文件句柄排查)、util-linux(dmesg/mount/df等系统诊断)、netcat(网络连通性测试)及wget(HTTP端点验证)四大工具的实战用法与典型场景,助力高效排障。
148 7
|
13天前
|
人工智能 安全 索引
【Azure AI Search】AI Search的索引器(Indexer)中使用解码函数base64Decode报错
Azure AI Search索引器使用base64Decode时失败,因默认启用URL安全解码(useHttpServerUtilityUrlTokenDecode=true),而源数据为标准Base64编码。解决方案:在mappingFunction中显式设置`"useHttpServerUtilityUrlTokenDecode": false`,即可正确解码。
118 6
|
1月前
|
运维 监控 网络协议
【Azure Container App】Debug Console的调试工具试验(一)-- iputils / net-tools / procps
在使用 Azure Container Apps 时,很多问题只在生产环境出现: 应用无法访问外部服务、端口监听异常、CPU 飙高却找不到原因。 当你进入 Debug Console 后,真正能用的工具到底有哪些? 这些工具又该在什么场景下使用? 本系列文章将对 Debug Console 中预装的调试工具进行逐一实测, 帮你在没有 SSH、没有 VM、没有 kubectl 的情况下完成有效排障。
110 3
|
2月前
|
开发者
【Azure App Service】记录App Service Kudu站点的File Manger中无法查看文件列表的原因
本文描述Azure App Service Kudu控制台中文件目录UI显示为空(实际有文件),但PowerShell的`ls`命令可正常列出的问题。通过浏览器开发者工具定位到Unicode字符编码错误(\uDC6D),根源是文件名含非法代理对字符。解决方案:检查并重命名本地文件。
|
2月前
|
安全 Go Python
【Azure Function】在Azure上的 Python Function 资源被扫描出包含安全漏洞
Azure Python Function因`cryptography<41.0.5`(当前3.1.1)存在CVE-2023-5363高危漏洞。本地开发可直接修改requirements.txt;Portal创建的函数则需通过Kudu站点(scm.chinacloudsites.cn)进入/wwwroot,编辑requirements.txt升级版本并重启应用。
165 11
|
2月前
|
开发工具 C++ Python
【Azure Function App】部署完 Azure Function 发现 Function 在门户消失了
VS Code部署Python Function App至Azure成功,但门户无函数显示。经查,因`WEBSITE_RUN_FROM_PACKAGE=1`导致依赖未按requirements.txt安装,缺失`azure.monitor`包。解决:设该变量为0,补全依赖,重新部署即可。
122 2
|
2月前
|
NoSQL API Redis
【Azure 环境】获取Azure上资源的创建时间createdTime信息(ARM REST API版本)
Azure Redis GET API不返回systemData.createdTime。可通过ARM Resources List API($expand=createdTime)获取创建时间,但迁移后显示迁移完成时间而非原始创建时间。
105 1
|
3月前
|
存储 Kubernetes API
【Azure APIM】APIM的自建网关如何解决自签名证书的受信任问题呢?(不成功方案的分析)
本文探讨Azure APIM自建网关信任自签名证书的第四种方案——通过`az aks update --custom-ca-trust-certificates`将CA证书注入AKS节点。经验证,该方法仅作用于节点系统层,对Pod内运行的APIM网关容器无效(因其使用.NET TLS路径,不读取系统CA)。最终确认:解决信任问题仍需回归前三种Pod级方案(如环境变量SSL_CERT_FILE、镜像预装或跳过验证)。
131 9