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
相关产品推荐
相关产品推荐

