script pour vérifier si le certificat SSL est valide

12

J'ai plusieurs certificats SSL et j'aimerais être averti de l'expiration d'un certificat.

Mon idée est de créer un cronjob, qui exécute une commande simple chaque jour.

Je sais que la commande openssl sous Linux peut être utilisée pour afficher les informations de certificat du serveur distant, c.-à-d.:

openssl s_client -connect www.google.com:443

Mais je ne vois pas la date d'expiration dans cette sortie. De plus, je dois terminer cette commande avec CTRL + c .

Comment puis-je vérifier l'expiration d'un certificat distant à partir d'un script (de préférence avec openssl ) et le faire en "mode de traitement par lots" afin qu'il s'exécute automatiquement sans interaction de l'utilisateur?

    
posée Martin Vegter 09.10.2015 - 11:26
la source

3 réponses

12

Votre commande attendrait maintenant une requête http telle que GET index.php par exemple. Utilisez ceci à la place:

if true | openssl s_client -connect www.google.com:443 2>/dev/null | \
  openssl x509 -noout -checkend 0; then
  echo "Certificate is not expired"
else
  echo "Certificate is expired"
fi
  • true : donnera simplement aucune entrée suivie de eof, donc opensl se ferme après la connexion.
    • openssl ... : la commande de votre question
    • 2>/dev/null : la sortie d'erreur sera ignorée.
  • openssl x509 : active la gestion des données de certificat X.509.
    • Ceci lira par défaut de l'entrée standard
    • -noout : supprime la sortie complète du certificat
    • -checkend 0 : vérifie si le certificat a expiré dans les 0 secondes qui suivent
réponse donnée 09.10.2015 - 11:48
la source
7

Il vous obtient le certificat, mais il ne le décode pas. Comme cela serait nécessaire si vous voulez la date, vous ne la voyez pas. Il faut donc que vous le transmettiez dans l'application x509 de OpenSSL pour décoder le certificat:

openssl s_client -connect www.example.com:443 \
    -servername www.example.com </dev/null |\
    openssl x509 -in /dev/stdin -noout -text

Ceci vous donnera le certificat complet décodé sur stdout, y compris ses dates de validité.

    
réponse donnée 09.10.2015 - 11:41
la source
2

Si vous devez vérifier la date d'expiration, merci de cet article de blog , trouvé un moyen de trouver cette information avec d'autres informations pertinentes en un seul appel:

echo | openssl s_client -servername unix.stackexchange.com -connect unix.stackexchange.com:443 2>/dev/null | openssl x509 -noout -issuer -subject -dates

La sortie comprend l'émetteur, le sujet (à qui le certificat est délivré), la date d'émission et enfin la date d'expiration :

issuer= /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
subject= /C=US/ST=NY/L=New York/O=Stack Exchange, Inc./CN=*.stackexchange.com
notBefore=May 21 00:00:00 2016 GMT
notAfter=Aug 14 12:00:00 2019 GMT
    
réponse donnée 10.02.2018 - 16:50
la source

Lire d'autres questions sur les étiquettes