SSL証明書の有効期限チェックを zabbixに入れこもうと思ったんですが、
Zabbixだと設定が面倒だなということで、お手軽なバッチをPHPで作りました。
URLリストをただ追加していけばいい形です。
この方が運用が楽だなと。もしよければ ご利用ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?php //================================================ // Setting //================================================ //Alert mail $toMail = 'to@example.com'; $fromMail = 'from@example.com'; //Target Before $before = 14; //Target URL $list = <<<END https://www.example.com/ https://sub.example.com/ END; //================================================ $urls = explode("\n",$list); $alert = false; $beforeDate = date('Y-m-d',strtotime($before .' day')); foreach($urls as $url){ $orignal_parse = parse_url(trim($url), PHP_URL_HOST); $get = stream_context_create(array("ssl" => array("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']); $valid_to = date("Y-m-d",$certinfo['validTo_time_t']); $status = "{$url} : {$valid_to}\n"; echo($status); if($valid_to < $before_date){ $alert .= $status; } } if($alert){ $body = "SSL expiration {$before} days ago \n\n" .$alert; mb_send_mail($to_mail,'【Alert】SSL expiration',$body,"From: {$fromMail}"); } ?> |
エラー
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
というエラーが出る場合は、サーバー側のCA証明書が古い可能性があるので、確認しましょう。