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

Azure Web App自定义域名SSL证书的检查与更新技术问询

获取Azure Web App托管SSL证书过期时间(Azure.ResourceManager库)

针对你遇到的托管证书无法通过GetSitePublicCertificates()获取的问题,核心原因是托管证书和用户上传的公共证书属于不同的资源类型,需要通过专门的API来处理:

1. 获取托管证书并检查过期时间

托管证书存储在Web App的SiteManagedCertificate集合中,你可以通过site.GetSiteManagedCertificates()获取,再通过Host Name Binding的Thumbprint匹配对应证书,进而读取过期时间:

修改你代码中检查SSL的部分:

if (binding.Data.SslState == HostNameBindingSslState.SniEnabled)
{
    // 获取当前Web App的所有托管证书
    var managedCertificates = await site.GetSiteManagedCertificates().GetAllAsync().ToListAsync();
    // 通过绑定的Thumbprint匹配对应的证书
    var targetCert = managedCertificates.FirstOrDefault(cert => cert.Data.Thumbprint == binding.Data.Thumbprint);
    
    if (targetCert != null)
    {
        DateTimeOffset expireDate = targetCert.Data.ExpirationDate;
        bool isExpired = expireDate < DateTimeOffset.UtcNow;
        
        // 这里根据过期状态处理逻辑,比如记录结果
        result.Add(new AppServiceCustomDomainResult
        {
            DomainName = binding.Data.Name,
            SslIsValid = !isExpired,
            SslExpireTime = expireDate
        });
    }
}

2. 实现托管证书的添加逻辑

如果需要为新域名添加托管证书,可以通过SiteManagedCertificateCollection.CreateOrUpdateAsync创建证书,再绑定到Host Name Binding:

// 假设要添加的域名是custom.example.com
string targetDomain = "custom.example.com";

// 1. 创建托管证书(Azure自动生成并验证)
var certData = new SiteManagedCertificateData
{
    HostName = targetDomain
};
var certOperation = await site.GetSiteManagedCertificates().CreateOrUpdateAsync(
    WaitUntil.Completed,
    targetDomain, // 用域名作为证书名称
    certData);
var newCert = certOperation.Value;

// 2. 将证书绑定到域名
var bindingData = new HostNameBindingData
{
    HostName = targetDomain,
    SslState = HostNameBindingSslState.SniEnabled,
    Thumbprint = newCert.Data.Thumbprint
};
await site.GetSiteHostNameBindings().CreateOrUpdateAsync(
    WaitUntil.Completed,
    targetDomain,
    bindingData);

关键说明

  • GetSitePublicCertificates()仅返回用户手动上传的证书,托管证书属于Azure自动管理的资源,必须用GetSiteManagedCertificates()获取。
  • 托管证书要求域名已完成Azure所有权验证(添加TXT记录),否则创建会失败。
  • 无论是托管证书还是上传的证书,其Data.ExpirationDate属性都直接提供过期时间,无需额外解析证书内容。

内容的提问来源于stack exchange,提问作者Max Power

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:20:24