Comprobar caducidad certificado de dominio vía comando (Powershell / Bash)
Hoy os voy a enseñar como verificar la caducidad de vuestros certificados SSL que utilizáis en vuestras páginas web. Yo lo suelo usar desde Zabbix para tener otro punto de validación, por si mi proveedor no me lo da o se me pasa.
Como utilizo indistintamente Linux, Windows o MacOS, os voy a enseñar como lanzarlo en los diferentes sistemas.
Para Linux, tendréis que tener instalado previamente “openssl”.
Revisar estado de certificado SSL vía comando de Bash
1 |
echo -n Q | openssl s_client -servername maquinasvirtuales.eu -connect maquinasvirtuales.eu:443 | openssl x509 -noout -dates |
1 2 3 4 5 6 7 8 9 10 |
MacBook-Pro-de-Raul:~ raulunzue$ echo -n Q | openssl s_client -servername maquinasvirtuales.eu -connect maquinasvirtuales.eu:443 | openssl x509 -noout -dates depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1 verify return:1 depth=1 C = US, O = Let's Encrypt, CN = R3 verify return:1 depth=0 CN = maquinasvirtuales.eu verify return:1 DONE notBefore=Mar 23 12:43:57 2023 GMT notAfter=Jun 21 12:43:56 2023 GMT |
1 |
DOM="www.maquinasvirtuales.eu" PORT="443" echo -n Q | openssl s_client -servername $DOM -connect $DOM:$PORT | openssl x509 -noout -dates |
Revisar estado de certificado SSL vía comando / script de Powershell
Os enseño como hacerlo vía script de Powershell (os dejo para colocar usuario y contraseña de correo para que hagáis las pruebas, en el blog podéis encontrar como encriptar la contraseña y el usuario):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# EL BLOG DE NEGU - POWERSHELL SCRIPT # Días de aviso de caducidad $minCertAge = 25 $timeoutMs = 10000 # Listado de páginas webs $webs = @( "https://www.maquinasvirtuales.eu/" "https://www.cloudconsulting.es/", "https://www.agenciadeposicionamientoweb.net/" ) # Deshabilitamos la validacion del certificado [Net.ServicePointManager]::ServerCertificateValidationCallback = {$true} # Tratamos listado de webs foreach ($web in $webs) { # Listamos página web Write-Host Check $web -f Green $req = [Net.HttpWebRequest]::Create($web) $req.Timeout = $timeoutMs # Chequeamos respuesta URL try {$req.GetResponse() |Out-Null} catch {Write-Host URL check error $web`: $_ -f Red} # Revisamos estado de certificado $expDate = $req.ServicePoint.Certificate.GetExpirationDateString() $certExpDate = [datetime]::ParseExact($expDate, “dd/MM/yyyy HH:mm:ss”, $null) [int]$certExpiresIn = ($certExpDate - $(get-date)).Days $certName = $req.ServicePoint.Certificate.GetName() $certThumbprint = $req.ServicePoint.Certificate.GetCertHashString() $certEffectiveDate = $req.ServicePoint.Certificate.GetEffectiveDateString() $certIssuer = $req.ServicePoint.Certificate.GetIssuerName() # Si el certificado if ($certExpiresIn -gt $minCertAge) { Write-Host El certificado de la pagina $web expira en $certExpiresIn dias [$certExpDate] -f Green } else { #$message= 'El certificado de la pagina' #$messagetitle= 'Renovar certificado de' Write-Host $message [$certExpDate]. Details:`n`nCert name: $certName`Cert thumbprint: $certThumbprint`nCert effective date: $certEffectiveDate`nCert issuer: $certIssuer -f Red # Enviar un correo a administrador con caducidad $userName = 'email@gmail.com' $password = 'passwd' [SecureString]$securepassword = $password | ConvertTo-SecureString -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securepassword Send-MailMessage -SmtpServer smtp.gmail.com -Port 587 -UseSsl -From email@gmail.com -To administrador@gmail.com -Subject "Renovar certificado de $web" -Body "El certificado de la pagina $web expira en $certExpiresIn dias" -Credential $credential } # Agregamos una línea al final de cada revisión write-host "________________" `n } |
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?