PowerShell检测HTTPS证书有效期脚本:3种实用方法+自动化监控方案
HTTPS证书过期是导致网站无法访问的常见原因,尤其是有多台服务器、多个域名的运维场景,手动逐个检查效率极低。PowerShell作为Windows平台原生的自动化工具,无需安装额外依赖,就能快速实现HTTPS证书有效期的检测,甚至结合计划任务实现自动化监控。本文将介绍3种实用的PowerShell检测HTTPS证书有效期的脚本,覆盖单域名检测、批量检测、带邮件提醒的自动化监控场景,帮你彻底解决证书过期隐患。
方法一:使用Invoke-WebRequest快速检测单域名证书
Invoke-WebRequest是PowerShell自带的Web请求cmdlet,发起HTTPS请求时会自动获取服务端的SSL证书,我们可以通过解析返回的证书对象,直接拿到证书的过期时间。
单域名检测脚本示例:
$url = "https://www.youres.cn"
try {
$request = [System.Net.HttpWebRequest]::Create($url)
$request.GetResponse().Close()
$cert = $request.ServicePoint.Certificate
$expirationDate = $cert.GetExpirationDateString()
$daysRemaining = ($cert.NotAfter - (Get-Date)).Days
Write-Output "域名:$url"
Write-Output "证书过期时间:$expirationDate"
Write-Output "剩余天数:$daysRemaining"
} catch {
Write-Output "检测失败:$($_.Exception.Message)"
}
这个方法的优势是无需额外依赖,PowerShell原生支持,适合快速检测单个域名的证书状态。缺点是会发起完整的HTTP请求,对于只需要获取证书的场景来说,有一定额外开销。
方法二:基于TCP连接批量检测多个域名证书
如果需要批量检测多个域名的证书,用TCP直接连接目标域名的443端口,获取SSL证书,可以避免HTTP请求的额外开销,效率更高。核心是通过System.Net.Sockets.TcpClient建立TCP连接,然后用System.Net.Security.SslStream获取证书。
批量检测脚本示例:
$domains = @("www.youres.cn", "blog.youres.cn", "shop.youres.cn")
$port = 443
foreach ($domain in $domains) {
try {
$tcpClient = New-Object System.Net.Sockets.TcpClient
$tcpClient.Connect($domain, $port)
$sslStream = New-Object System.Net.Security.SslStream($tcpClient.GetStream(), $false)
$sslStream.AuthenticateAsClient($domain)
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($sslStream.RemoteCertificate)
$expirationDate = $cert.NotAfter
$daysRemaining = ($expirationDate - (Get-Date)).Days
Write-Output "域名:$domain"
Write-Output "证书颁发给:$($cert.Subject)"
Write-Output "过期时间:$expirationDate"
Write-Output "剩余天数:$daysRemaining"
Write-Output "------"
$sslStream.Close()
$tcpClient.Close()
} catch {
Write-Output "域名:$domain 检测失败:$($_.Exception.Message)"
Write-Output "------"
}
}
这个方法的优势是效率高,不需要完成HTTP请求,只获取证书信息,适合批量检测几十甚至上百个域名的场景。缺点是需要处理TCP和SSL流的异常,代码稍微复杂一点。
方法三:带邮件提醒的自动化监控脚本
实际运维中,我们需要定期检测证书有效期,当剩余天数小于阈值(比如30天)时自动发送邮件提醒,避免证书过期。可以结合上面的批量检测方法,加上邮件发送逻辑,再通过Windows计划任务定期执行,实现全自动监控。
带邮件提醒的监控脚本示例:
# 配置部分
$domains = @("www.youres.cn", "blog.youres.cn")
$thresholdDays = 30
$smtpServer = "smtp.qq.com"
$smtpPort = 587
$smtpUser = "your_email@qq.com"
$smtpPass = "your_email_password"
$receivers = @("admin@youres.cn")
# 检测逻辑
$warningDomains = @()
foreach ($domain in $domains) {
try {
$tcpClient = New-Object System.Net.Sockets.TcpClient
$tcpClient.Connect($domain, 443)
$sslStream = New-Object System.Net.Security.SslStream($tcpClient.GetStream(), $false)
$sslStream.AuthenticateAsClient($domain)
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($sslStream.RemoteCertificate)
$daysRemaining = ($cert.NotAfter - (Get-Date)).Days
if ($daysRemaining -lt $thresholdDays) {
$warningDomains += [PSCustomObject]@{
Domain = $domain
ExpirationDate = $cert.NotAfter
DaysRemaining = $daysRemaining
}
}
$sslStream.Close()
$tcpClient.Close()
} catch {
$warningDomains += [PSCustomObject]@{
Domain = $domain
Error = $_.Exception.Message
}
}
}
# 发送邮件提醒
if ($warningDomains.Count -gt 0) {
$mailBody = "以下域名HTTPS证书即将过期或检测失败:`n`n"
foreach ($item in $warningDomains) {
if ($item.Error) {
$mailBody += "域名:$($item.Domain) 检测失败,原因:$($item.Error)`n"
} else {
$mailBody += "域名:$($item.Domain) 过期时间:$($item.ExpirationDate),剩余天数:$($item.DaysRemaining)`n"
}
}
$mailMessage = New-Object System.Net.Mail.MailMessage
$mailMessage.From = $smtpUser
foreach ($receiver in $receivers) {
$mailMessage.To.Add($receiver)
}
$mailMessage.Subject = "HTTPS证书过期预警"
$mailMessage.Body = $mailBody
$smtpClient = New-Object System.Net.Mail.SmtpClient($smtpServer, $smtpPort)
$smtpClient.EnableSsl = $true
$smtpClient.Credentials = New-Object System.Net.NetworkCredential($smtpUser, $smtpPass)
$smtpClient.Send($mailMessage)
Write-Output "预警邮件已发送"
} else {
Write-Output "所有域名证书剩余天数均大于$thresholdDays天,无需提醒"
}
配置好脚本后,打开Windows计划任务程序,创建一个每天执行的计划任务,触发脚本运行,就能实现证书有效期的全自动监控,彻底避免证书过期导致的线上故障。
相关文章推荐
- curl测试网站HTTPS证书有效期命令:3种实用方法+PowerShell适配指南
- 批量检查HTTPS证书到期时间脚本:Shell/Python/PowerShell三版通用
- curl忽略SSL证书错误参数详解:什么场景能用、有什么风险、更安全的替代方案
以上3种PowerShell检测HTTPS证书有效期的脚本,覆盖了从单域名快速检测到批量自动化监控的全场景,无需额外依赖,开箱即用。建议根据自身场景选择合适的方案,尤其是多域名运维的场景,一定要配置自动化监控,避免证书过期影响业务可用性。
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论