15.10.2021 | Allgemein, Linux, Webentwicklung
SSL ABLAUFDATUM abfragen und via Webfrontend ausgeben

Hin und wieder habe ich ein Problem mit der automatischen Aktualisierung von SSL Zertifikaten auf alten Servern, wo eine alte CertBot Installation läuft. Zu diesem Zweck hatte ich mir dann Gedanken gemacht, wie man das zusätzlich monitoren könnte. Dabei herausgekommen ist ein kleines Script was idealerweise nur intern genutzt wird und zum einen das Shellscript zur Abfrage der Domains via openssl erstellt und zum anderen eine Art Logdatei schreibt und diese in einem Minifrontend ausgibt. Das Script soll nur zur Inspiration anregen. Die Verarbeitung kann natürlich auch in anderer Form erfolgen, per Mail versand, zur Überführung in eine Datenbank usw.

Zunächst wird ein Array mit verschiedenen Domains angereichert. Daraus wird dann die Datei „sslcheck.sh“ erstellt, die direkt im Anschluss via PHP ausgeführt wird und eine Logdatei erzeugt.

Die Variablen $script und $logfile müssen auf Deine Bedürfnisse und Umgebung angepasst werden. Das Array $domains um Deine Domains ergänzt werden. Wichtig an dieser Stelle zu erwähnen ist, dass zum einen die Pakete für openssl installiert sein müssen und das das Kommando shell_exec() durch den Webserver ausgeführt werden darf. Daher auch der Hinweis diese Funktionalität vielleicht nur auf die lokale Umgebung zu beschränken. Im Verlauf des Scripts muss das Script ausführbar gemacht und ausgeführt werden. Die Änderungen des Benutzers ist in diesem Fall nicht notwendig, weil die Dateien bereits durch den Webserver Benutzer erstellt wurden.

<?php
    // ini_set('display_errors', 1);
    // error_reporting(E_ALL);

    // Erstellt ein Shellscript zur Abfrage von SSL Zertifikaten

    // Zu erstellendes Shellscript; zu erstellende Logdatei
    $script = "/var/www/herakles02.linux.local/ssl_check_create/sslcheck.sh";
    $logfile = "/var/www/herakles02.linux.local/ssl_check_create/ssldomains.log";

    // Array der abzufragenden Domains
    $domains = [
        "jensbreitbarth.de",
        "www.XYZ.de",
        "sub.XYZ.de"
    ];

    $handle = fopen($script, "w+");

    // Schreiben des Shellscriptes
    fwrite($handle, "#!/bin/bash\n");
    fwrite($handle, "logfile=$logfile\n\n");
    fwrite($handle, "echo > \$logfile\n");

    foreach($domains as $domain):
        fwrite($handle, "echo $domain >> \$logfile\n");
        fwrite($handle, "echo | openssl s_client -connect $domain:443 | openssl x509 -noout -dates >> \$logfile\n");
        fwrite($handle, "echo \"---\" >> \$logfile\n");
    endforeach;

    // Dateihandle schließen
    fclose($handle);

    // Ausführbarkeit für den Webserver setzen; Shellscript ausführen um die Datei ssldomains.log zu erzeugen
    shell_exec("chmod 0700 $script");
    shell_exec("$script");
?>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <title>SSL Domains</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
    <style type="text/css">
        .domains div:last-child {
            display: none;
        }
    </style>
</head>
<body>
<div class="container mt-4">
    <div class="row">
        <div class="col-12">
            <div class="alert alert-success">
                <h3><strong>Geprüfte SSL Zertifikate</strong></h3>
                <p><strong><?php echo date("d.m.Y - H:i", filemtime("$logfile")); ?> Uhr</strong></p>
            </div>
            <div class="domains">
            <?php
                $content = file_get_contents("$logfile");
                $content = explode("---","$content");
                foreach($content as $domain) {
                    $domain = trim($domain);
                    echo nl2br("<div class='alert alert-info'>$domain</div>");
                }
            ?>
            </div>
        </div>
    </div>
</div>
</body>
</html>

 

Erstelltes Shellscript

Das dazu erstellte Shellscript enthält dann die um die Domain ergänzten Kommandos um die SSL Zertifikate abzufragen.

#!/bin/bash
logfile=/var/www/herakles02.linux.local/ssl_check_create/ssldomains.log

echo > $logfile
echo jensbreitbarth.de >> $logfile
echo | openssl s_client -connect jensbreitbarth.de:443 | openssl x509 -noout -dates >> $logfile
echo "---" >> $logfile

echo www.XYZ.de >> $logfile
echo | openssl s_client -connect www.XYZ.de:443 | openssl x509 -noout -dates >> $logfile
echo "---" >> $logfile

echo sub.XYZ.de >> $logfile
echo | openssl s_client -connect sub.XYZ.de:443 | openssl x509 -noout -dates >> $logfile
echo "---" >> $logfile

 

Erstelltes Logfile

Die daraus resultierende Logdatei ist ganz einfach gehalten und enthält das Erstellungs- und Ablaufdatum des Zertifikates. Optisch kann man es sicherlich noch aufmotzen.

jensbreitbarth.de
notBefore=Oct 12 06:25:13 2021 GMT
notAfter=Jan 10 06:25:12 2022 GMT
---
www.XYZ.de
notBefore=Oct 14 06:26:23 2021 GMT
notAfter=Jan 12 06:26:22 2022 GMT
---
sub.XYZ.de
notBefore=Oct 14 06:54:56 2021 GMT
notAfter=Jan 12 06:54:55 2022 GMT
---

 

Ausgabe im Frontend

Die Ausgabe im Frontend ist dann simpel. Ich sehe das Datum des zuletzt generierten Shellscripts und darunter die abgefragten Domains. Verpackt mit ein paar Zeilen HTML und CSS aus dem Bootstrap Framework. Mehr braucht es eigentlich an dieser Stelle nicht.

geschrieben von Jens

, , , ,

keine Kommentare