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

问题描述

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

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

访问流图

image

错误信息

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后,可见错误信息

image

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

 

问题解答

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

HTTPS证书验证流程图:

image

当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-----

image

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

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

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

 

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

实验证明,不可以!

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

image

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

image

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

image

注意:在上传证书页面,只支持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文件的保存路径。

image

 

 

 

参考资料

在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

 

posted @ 2026-01-17 11:54  编码者卢布  阅读(5)  评论(1)    收藏  举报