PHP ssl check

7 views
Skip to first unread message

Jan Novak

unread,
Sep 3, 2020, 2:42:43 AM9/3/20
to
Moin,

wir haben ne Menge letsencrypt Zertifikate, wo wir die Gültigkeit
prüfen, u.a. mit

$stream = stream_context_create (array("ssl" =>
array("capture_peer_cert" => true)));
$read = fopen("https://".$sdata['domain'], "rb", false, $stream);
$cont = stream_context_get_params($read);
$var = ($cont["options"]["ssl"]["peer_certificate"]);
$cert = openssl_x509_parse( $var );

Leider wirft mir dieser Code seit neustem bei SSL3 Fehler, ansonsten
funktioniert das.

Gibt es eine elegantere Lösung, um die Laufzeit eines SSL Zertifikates
zu überprüfen?


Jan

Arno Welzel

unread,
Sep 5, 2020, 11:14:00 AM9/5/20
to
Jan Novak:

> wir haben ne Menge letsencrypt Zertifikate, wo wir die Gültigkeit
> prüfen, u.a. mit
>
> $stream = stream_context_create (array("ssl" =>
> array("capture_peer_cert" => true)));
> $read = fopen("https://".$sdata['domain'], "rb", false, $stream);
> $cont = stream_context_get_params($read);
> $var = ($cont["options"]["ssl"]["peer_certificate"]);
> $cert = openssl_x509_parse( $var );
>
> Leider wirft mir dieser Code seit neustem bei SSL3 Fehler, ansonsten
> funktioniert das.

Was für einen Fehler und wo genau?

> Gibt es eine elegantere Lösung, um die Laufzeit eines SSL Zertifikates
> zu überprüfen?

Nicht wirklich. Hier eine andere Lösung:

$url = "https://www.google.com";

$orignal_parse = parse_url($url, PHP_URL_HOST);
$get = stream_context_create([
"ssl" => [
"capture_peer_cert" => true
]]);
$read = stream_socket_client("ssl://".$orignal_parse.":443", $errno,
$errstr, 30, STREAM_CLIENT_CONNECT, $get);
$cert = stream_context_get_params($read);
$certinfo = openssl_x509_parse(
$cert['options']['ssl']['peer_certificate']
);

echo '<pre>';
print_r($certinfo);
echo '</pre>';



--
Arno Welzel
https://arnowelzel.de

Jan Novak

unread,
Sep 8, 2020, 6:56:49 AM9/8/20
to
Hallo Arno,

Am 05.09.20 um 17:13 schrieb Arno Welzel:
>> wir haben ne Menge letsencrypt Zertifikate, wo wir die Gültigkeit
>> prüfen, u.a. mit

...

>> Leider wirft mir dieser Code seit neustem bei SSL3 Fehler, ansonsten
>> funktioniert das.
> Was für einen Fehler und wo genau?

Asche auf mein Haupt ... keine Ahnung (mehr). Habe das soweit umgangen,
dass ich das mit Curl durch die Brust ins Auge geschossen habe.
Aber die Lösung ist "keine" Lösung. Viel zu viele externe Aufrufe, die
schief gehen könnten.
> Nicht wirklich. Hier eine andere Lösung:
> $url = "https://www.google.com";
> $orignal_parse = parse_url($url, PHP_URL_HOST);
> $get = stream_context_create([
> "ssl" => [
> "capture_peer_cert" => true
> ]]);
> $read = stream_socket_client("ssl://".$orignal_parse.":443", $errno,
> $errstr, 30, STREAM_CLIENT_CONNECT, $get);
> $cert = stream_context_get_params($read);
> $certinfo = openssl_x509_parse(
> $cert['options']['ssl']['peer_certificate']
> );
>
> echo '<pre>';
> print_r($certinfo);
> echo '</pre>';

Das probiere ich auch noch mal.
Danke.

Jan

Matthias P. Würfl

unread,
Sep 9, 2020, 3:31:49 AM9/9/20
to
Hallo Jan!

Jan Novak schrieb am Donnerstag, 3. September 2020 um 06:42:43 UTC:

> wir haben ne Menge letsencrypt Zertifikate, wo wir die Gültigkeit
> prüfen

> Gibt es eine elegantere Lösung, um die Laufzeit eines SSL Zertifikates
> zu überprüfen?

Ich weiß nicht mehr, warum ich das mit curl mache, aber ich mache das mit curl_getinfo($c,CURLINFO_CERTINFO) und es funktioniert eigentlich gut. Das läuft seit mehreren Jahren paartausendmal am Tag und es zeigt mir sehr schön an, wenn irgendwo die Erneuerung eines Zertifikats fehlschlug.

Grüße, Matthias
Reply all
Reply to author
Forward
0 new messages