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

サンプル・プログラム
checkSSL.php | サンプル・プログラム本体。 |
pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
準備
解説:SSLの有効期限を調べる
0130: /**
0131: * SSLサーバ証明書の有効期限を返す
0132: * @param string $url 調査するURL
0133: * @return long SSL証明書の有効期限/FALSE
0134: */
0135: function getLimitSSL($url) {
0136: $arr = parse_url($url);
0137: if ($arr == FALSE) return FALSE;
0138: if ($arr['scheme'] != 'https') return FALSE;
0139:
0140: $stream_context = stream_context_create(array(
0141: 'ssl' => array('capture_peer_cert' => TRUE)
0142: ));
0143: $resource = stream_socket_client(
0144: 'ssl://' . $arr['host'] . ':443',
0145: $errno,
0146: $errstr,
0147: 30,
0148: STREAM_CLIENT_CONNECT,
0149: $stream_context
0150: );
0151: $cont = stream_context_get_params($resource);
0152: $parsed = openssl_x509_parse($cont['options']['ssl']['peer_certificate']);
0153:
0154: return (strpos($parsed['subject']['CN'], $arr['host']) !== FALSE) ?
0155: $parsed['validTo_time_t'] : FALSE;
0156: }

ストリーム関数 stream_context_create によってストリームコンテキストを作成し、次に関数 stream_socket_client によってSSLソケット接続を開く。そして関数 stream_context_get_params によってSSL証明書に関するパラメータを取得する。
取得パラメータはOpenSSL関数 openssl_x509_parse によってパーシングし、証明書の有効期限を取り出す。
0158: /**
0159: * SSLサーバ証明書の有効期限を調べる
0160: * @param string $url 調査するURL
0161: * @return bool TRUE:有効期限内/FALSE:期限外
0162: */
0163: function checkSSL($url) {
0164: $limit = getLimitSSL($url);
0165: if ($limit == FALSE) return FALSE;
0166:
0167: return ($limit - time() > 0) ? TRUE : FALSE;
0168: }
(2022年6月27日)FastCGIで正常動作しない不具合を修正
(2022年6月4日)PHP8対応,リファラ・チェック追加