PHPでSSLサーバ証明書の有効期限を調べる

(1/1)
今回は、PHPを使いSSLサーバ証明書の有効期限を調べるプログラムを作る。

(2024年1月21日)不具合修正

目次

サンプル・プログラムの実行例

PHPでSSLサーバ証明書の有効期限を調べる

サンプル・プログラム

圧縮ファイルの内容
checkSSL.phpサンプル・プログラム本体。
pahooInputData.phpデータ入力に関わる関数群。
使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。
checkSSL.php 更新履歴
バージョン 更新日 内容
2.0.1 2022/06/04 不具合修正
2.0 2022/06/04 PHP8対応,リファラ・チェック追加
1.0 2015/03/01 初版
pahooInputData.php 更新履歴
バージョン 更新日 内容
1.4.1 2023/09/30 コメントの訂正
1.4.0 2023/09/09 $_GET, $_POST参照をfilter_input()関数に置換
1.3.0 2023/07/11 roundFloat() 追加
1.2.0 2023/04/22 exitIfLessVersion() 追加
1.1.2 2023/02/05 validString() 修正

準備

  43: //表示幅(ピクセル)
  44: define('WIDTH', 600);
  45: 
  46: //URLの初期値
  47: define('DEF_URL', 'https://www.pahoo.org/');
  48: //URLの最小長
  49: define('MIN_LEN_URL', 10);
  50: //URLの最大長
  51: define('MAX_LEN_URL', 500);
  52: 
  53: /**

データ入力に関わる関数群は別ファイル "pahooInputData.php" に分離しており、include_path が通ったディレクトリに配置すること。

解説:SSLの有効期限を調べる

 130: /**
 131:  * SSLサーバ証明書の有効期限を返す
 132:  * @param   string $url   調査するURL
 133:  * @return  long  SSL証明書の有効期限/FALSE
 134: */
 135: function getLimitSSL($url) {
 136:     $arr = parse_url($url);
 137:     if ($arr == FALSE)  return FALSE;
 138:     if ($arr['scheme'!'https')  return FALSE;
 139: 
 140:     $stream_context = stream_context_create(array(
 141:         'ssl' => array('capture_peer_cert' => TRUE)
 142:     ));
 143:     $resource = stream_socket_client(
 144:         'ssl://' . $arr['host'. ':443',
 145:         $errno,
 146:         $errstr,
 147:         30,
 148:         STREAM_CLIENT_CONNECT,
 149:         $stream_context
 150:     );
 151:     $cont = stream_context_get_params($resource);
 152:     $parsed = openssl_x509_parse($cont['options']['ssl']['peer_certificate']);
 153: 
 154:     return (strpos($parsed['subject']['CN'], $arr['host']) !== FALSE?
 155:         $parsed['validTo_time_t': FALSE;
 156: }

SSLサーバ証明書の有効期限を取得するのがユーザー関数 getLimitSSL である。

ストリーム関数  stream_context_create  によってストリームコンテキストを作成し、次に関数  stream_socket_client  によってSSLソケット接続を開く。そして関数  stream_context_get_params  によってSSL証明書に関するパラメータを取得する。
取得パラメータはOpenSSL関数  openssl_x509_parse  によってパーシングし、証明書の有効期限を取り出す。

 158: /**
 159:  * SSLサーバ証明書の有効期限を調べる
 160:  * @param   string $url   調査するURL
 161:  * @return  bool TRUE:有効期限内/FALSE:期限外
 162: */
 163: function checkSSL($url) {
 164:     $limit = getLimitSSL($url);
 165:     if ($limit == FALSE)    return FALSE;
 166: 
 167:     return ($limit - time() > 0? TRUE : FALSE;
 168: }

有効期限はUNIX時間として取得されるので、ユーザー関数 checkSSL によって現在日付と比較し、有効期限内かどうかを判定する。
(この項おわり)
header