You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Azure Application Gateway中导入Let's Encrypt根证书报错如何解决

问题:Azure应用网关上传Let's Encrypt证书报错“证书数据无效”

我正在配置VNet内的Api Management通过应用网关(WAF)对外提供访问能力,目前卡在根证书上传到应用网关的步骤,系统提示“证书数据无效”,看起来Azure Application Gateway对Let's Encrypt证书存在兼容性问题。

我使用的证书对应域名如下:

  • mydomain.com.br
  • api.mydomain.com.br
  • developer.mydomain.com.br
  • managemnet.mydomain.com.br

所有证书均通过acmesh生成,生成命令如下:

./acme.sh --issue  -d mydomain.com.br --dns dns_gd    --server  letsencrypt
./acme.sh --issue  -d api.mydomain.com.br  --dns dns_gd    --server  letsencrypt
./acme.sh --issue  -d developer.mydomain.com.br ---dns dns_gd    --server  letsencrypt
./acme.sh --issue  -d management.mydomain.com.br --dns dns_gd    --server  letsencrypt

目前Vnet、子网、安全组和Api Management资源均已创建成功,仅在创建应用网关时出现问题,创建命令如下:

$appgwName = "apim-app-gw"
$appgw = New-AzApplicationGateway -Name $appgwName -ResourceGroupName $resGroupName -Location $location `
-BackendAddressPools $apimGatewayBackendPool,$apimPortalBackendPool,$apimManagementBackendPool `
-BackendHttpSettingsCollection $apimPoolGatewaySetting, $apimPoolPortalSetting, $apimPoolManagementSetting `
-FrontendIpConfigurations $fipconfig01 -GatewayIpConfigurations $gipconfig -FrontendPorts $fp01 `
-HttpListeners $gatewayListener,$portalListener,$managementListener `
-RequestRoutingRules $gatewayRule,$portalRule,$managementRule `
-Sku $sku -WebApplicationFirewallConfig $config -SslCertificates $certGateway,$certPortal,$certManagement `
-TrustedRootCertificate $trustedRootCert -Probes $apimGatewayProbe,$apimPortalProbe,$apimManagementProbe

问题出在最后一行指定.cer文件路径的环节,我尝试过上传mydomain.com.br.cer、fullchain.cer均失败,也尝试用openssl生成Base64格式文件还是报错,转换命令如下:

sudo openssl x509 -inform PEM -in /etc/letsencrypt/live/mydomain.com/fullchain.pem -outform DER -out trustedrootDER.cer
openssl x509 -inform der -in trustedrootDER.cer -out trustedroot.cer

我甚至额外创建了Windows虚拟机,参照官方方案操作仍然没有解决问题。
架构示意图如下:
架构示意图

恳请各位提供可行的解决方向,谢谢!


解决方案

按照以下步骤操作即可解决问题:

  1. 导出正确的根证书
    你之前上传的站点叶子证书、包含中间证书的fullchain都不符合应用网关的要求,应用网关需要的是签发证书的根CA公钥,对应Let's Encrypt证书就是ISRG Root X1根证书,执行以下命令导出:
openssl s_client -connect mydomain.com.br:443 -showcerts | awk '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/{if(NR>=3) print}' > isrg-root-x1.pem
openssl x509 -inform PEM -in isrg-root-x1.pem -outform DER -out isrg-root-x1.cer
  1. 修正证书对象创建逻辑
    不能直接把本地证书路径传给创建应用网关命令的-TrustedRootCertificate参数,需要先提前创建证书对象:
$trustedRootCert = New-AzApplicationGatewayTrustedRootCertificate `
  -Name "ISRGRootX1" `
  -CertificateFile "本地isrg-root-x1.cer的完整路径"
  1. v2 SKU可选优化
    如果你的应用网关用的是v2 SKU,不需要手动上传根证书,只需要在后端HTTP设置和健康探针里开启「从后端地址取主机名」选项,只要APIM绑定的Let's Encrypt证书是公网信任的,应用网关会自动完成信任校验。
  2. 检查APIM侧证书配置
    确认APIM自定义域名绑定的是完整的fullchain证书,不要只绑定单张叶子证书,避免TLS握手时应用网关无法拿到完整证书链导致验证失败。

内容的提问来源于stack exchange,提问作者Bruno Moreira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:27:04