SSL-Zertifikate organisieren mit PHP-Wrapper

Wer die kostenlosen SSL-Zertifikate verwendet, z.B. für kleinere private Webprojekte, sollte, nicht nur im Zuge der DSGVO, darauf achten, dass diese gültig sind. Google warnt seine Nutzer vor Websiten ohne Sicherheitszertifikat. Dieser einfache PHP-Wrapper ist ein Bestandteil meines Backends zum ganzeinheitlichen Managen kleinerer Webprojekte und diese Code-Zeilen stelle ich hiermit zur Verfügung.

(Noch) keine Benachrichtigungen, aber ein schneller Blick für alle

Dieser PHP-Wrapper ist aus meinem lokalen PHP-Framework extrahiert und kann jetzt einfach per copy&paste in eine lokale Umgebung eingefügt werden. Ich war jetzt nicht im Übermaß künstlerisch unterwegs und hab da nur kleinere CSS-Zeilen drüber gejagt.

SSL Zertifikat auf Gültigkeit prüfen (PHP)

Wie verwende ich den PHP-Wrapper?

1.) Lokalen Webserver installieren (MAMP,XAMP,…)
2.) Ordner erstellen, z.B. “sslcheck” und im htdocs-Ordner ablegen
3.) Folgende Zeilen als “index.php” dort im Ordner sslcheck ablegen:

Wichtig: Im oberen Abschnitt die gewünschten URLs eintragen:

<?php

/* URLs eintragen */
$url_liste = ["ebay.de", "apple.com", "onlinemarketingscience.com"];

?>

AB HIER KOPIEREN

<?php

/* URLs eintragen */
$url_liste = ["ebay.de", "apple.com", "onlinemarketingscience.com"];

?>

<html>
<head>
<title>Einfacher SSL Management - Wrapper in PHP</title>


<style>

html {

    font-size:12px;
    font-family:'Helvetica';
    border-top: 10px solid #000;
    border-bottom: 10px solid #000;
    background: #fcfcfc;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;


}


#header {

    text-align: center;
    position: fixed;
    width: 100%;
    top: 10px;
    left: 0;
    padding: 15px;
    font-size: 100%;
    background: #FFF;
    color: #000;

}

#main {

  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: #fff;
  padding: 25px;

}

#main td {

    background: #FCFCFC;
    padding: 10px;

}

#result {

    margin-top:50px;
    text-align: center;
    background: #FF4081;
    font-weight: bold;
    padding: 15px;

}

#domain_name {

font-weight: 400;

}

</style>


</head>
<body>

<div id="header">

<h1>Low Budget SSL Manager</h1>

</div>


<div id="main">

<?php

$counter = 0;
$success = 0;

function getCert($domain) {

    $ssl_url = "ssl://" . $domain . ":443";
    $g = stream_context_create (array("ssl" => array("capture_peer_cert" => true)));
    $r = stream_socket_client($ssl_url, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $g);
    $cont = stream_context_get_params($r);
    
    return openssl_x509_parse($cont["options"]["ssl"]["peer_certificate"]);

}


echo "<table>";

echo "<tr>";

    echo "<td>URL</td>";
    echo "<td>gültig bis</td>";
    echo "<td>verbleibende Tage</td>";
    echo "<td></td>";

    echo "</tr>";
  

for($i = 0; $i < count($url_liste); $i++) {

    $counter++;

    echo "<tr>";

    echo "<td>";
    echo '<span id="domain_name">' . $url_liste[$i] . "<span/>";
    echo "</td>";

    $cert = getCert($url_liste[$i]);

    if(isset($cert['validFrom_time_t'])) {

        // aktueller Tag
        $dt = new DateTime();

	    $validFrom = new DateTime("@" . $cert['validFrom_time_t']);
        $validTo = new DateTime("@" . $cert['validTo_time_t']);

        echo "<td>" . $validTo->format('d.m.Y') . "</td>";
        #$validFrom->format('d.m.Y') . " - " . $validTo->format('d.m.Y');
        
        $differenz = $dt->diff($validTo);

        echo "<td>";
        echo "= " . $differenz->days . " Tage noch gültig "; # wie viele Tage verbleiben?
        echo "</td>";

        $verbleibendeTage = $differenz->days;

        if ($verbleibendeTage > 0) {

            echo "<td>";
            echo "&#10004;";
            echo "</td>";
            $success++;
        }

        else {

            echo "<td>";
            echo "&#10008;";
            echo "</td>";

        }

    }

    else {

        echo "<td>-</td>";
        echo "<td>";
        echo "SSL ist nicht richtig konfiguriert.";
        echo "</td>";
        echo "<td>&#10008;</td>";
        
    }

}

echo "</table>";
 
?>

<div id="result">

Ergebnis der Auswertung:

<?php

echo $success . "/" . $counter . "<br />";

?>

</div>

</div>

</body>
</html>

4.) Zu http://localhost navigieren (kann abweichen, wenn Port) und SSL-Check machen.

Das war’s schon! Frühzeitig das Ablaufen eines SSL-Zertifikats bemerken und erneuern.