aboutsummaryrefslogtreecommitdiff
path: root/ssl_check.php
diff options
context:
space:
mode:
Diffstat (limited to 'ssl_check.php')
-rw-r--r--ssl_check.php57
1 files changed, 57 insertions, 0 deletions
diff --git a/ssl_check.php b/ssl_check.php
new file mode 100644
index 0000000..3d60b97
--- /dev/null
+++ b/ssl_check.php
@@ -0,0 +1,57 @@
+#!/usr/bin/env php
+<?php
+
+function notify($text) {
+ $fields = [
+ 'chat_id' => TELEGRAM_CHAT_ID,
+ 'text' => $text,
+ ];
+
+ $ch = curl_init();
+ $url = 'https://api.telegram.org/bot'.TELEGRAM_BOT_TOKEN.'/sendMessage';
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_POST, true);
+ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
+ curl_setopt($ch, CURLOPT_TIMEOUT, 10);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
+ curl_exec($ch);
+ curl_close($ch);
+}
+
+$domains = [
+ 'example.com',
+ 'example.org',
+ // add domains here
+];
+$now = time();
+
+const TELEGRAM_CHAT_ID = 0;
+const TELEGRAM_BOT_TOKEN = '';
+
+foreach ($domains as $d) {
+ $ipv4 = gethostbyname($d);
+ if ($ipv4 == $d) {
+ echo $d.": gethostbyname did not found ipv4\n";
+ continue;
+ }
+
+ $get = stream_context_create([
+ 'ssl' => [
+ 'capture_peer_cert' => true,
+ 'verify_peer' => false,
+ 'verify_peer_name' => false,
+ 'allow_self_signed' => true,
+ 'verify_depth' => 0,
+ ]
+ ]);
+ $read = stream_socket_client('ssl://'.$d.':443', $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $get);
+ $cert = stream_context_get_params($read);
+ $certinfo = openssl_x509_parse($cert['options']['ssl']['peer_certificate']);
+
+ $valid_to = $certinfo['validTo_time_t'];
+ if ($valid_to - $now < 86400*7) {
+ $text = "SSL-сертификат для {$d} истекает ".date('d.m.Y H:i:s', $valid_to);
+ notify($text);
+ }
+}