Website SSL Expiry script with automatic e-mail

Want to check the expiry date of your SSL certification? Create a .txt file with all your domainnames and create a .ps1 script containing the code below. Script without e-mail function, will just check and show a message in the console:

$minimumCertAgeDays = 14
$timeoutMilliseconds = 10000
$urls = get-content "C:\Users\%username%\Desktop\SSL\check-urls.txt"
#disabling the cert validation check. This is what makes this whole thing work with invalid certs...
[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

foreach ($url in $urls)
{
   # Write-Host Checking $url -f Green
    $req = [Net.HttpWebRequest]::Create($url)
    $req.Timeout = $timeoutMilliseconds
    $req.AllowAutoRedirect = $false
    try {$req.GetResponse() |Out-Null} catch {Write-Host Exception while checking URL $url`: $_ -f Blue}
    $certExpiresOnString = $req.ServicePoint.Certificate.GetExpirationDateString()
    [datetime]$expiration = [System.DateTime]::Parse($req.ServicePoint.Certificate.GetExpirationDateString())
    [int]$certExpiresIn = ($expiration - $(get-date)).Days

    if ($certExpiresIn -gt $minimumCertAgeDays)
    {
        Write-Host $url expires in $certExpiresIn days / Expires on $expiration -f Green
    } else {
        Write-Host Warning: Cert for site $url expires in $certExpiresIn days [on $expiration] -f Red
    }
}
 Start-Sleep -s 45

Script including e-mail function, don't forgot to change to your own server/credentials. Keep in mind the password is saved in plaintext

Last updated

Was this helpful?