《PHP8上級試験対策》PHPでSSL証明書を取得・解析する:openssl_x509_parseの使い方

  • URLをコピーしました!

はじめに

PHPには openssl_x509_parse() という便利な関数があり、SSL証明書の内容を配列として取得できます。これを使うことで、対象サイトの証明書情報(ドメイン名、有効期限、発行者など)をプログラムから簡単に確認できます。この記事では、実際に「phpexam.jp」の証明書を取得し、その内容を解析するサンプルを紹介します。

キーワード:openssl_x509_parse / stream_socket_client / SSL証明書 /

目次

サーバー証明書の取得

$resource = @stream_socket_client(
    'ssl://www.phpexam.jp:443',
    $errno,
    $errstr,
    60,
    STREAM_CLIENT_CONNECT,
    stream_context_create(['ssl'=>['capture_peer_cert' => true]])
);

ここで ssl://www.phpexam.jp:443 はHTTPSの接続先、capture_peer_certtrue にすることで、サーバーが提示した証明書をキャプチャできます。

証明書の解析

取得した証明書は openssl_x509_parse() で配列に変換できます。

$cont = stream_context_get_params($resource);
$x509 = openssl_x509_parse($cont['options']['ssl']['peer_certificate']);

この $x509 には証明書の詳細が格納されています。

出力例

以下のコードで証明書の内容を確認できます。

echo "<pre>";
print_r($x509);
echo "</pre>";

出力イメージ:

Array
(
    [name] => /CN=phpexam.jp
    [subject] => Array
        (
            [CN] => phpexam.jp
        )

    [issuer] => Array
        (
            [C] => US
            [O] => Let's Encrypt
            [CN] => R3
        )

    [validFrom_time_t] => 1756667602
    [validTo_time_t] => 1764446001
    [signatureTypeSN] => RSA-SHA256
)

注目すべきフィールド

  • subject … 証明書の対象ドメイン(例: phpexam.jp
  • issuer … 発行元(例: Let’s Encrypt R3)
  • validFrom_time_t … 証明書の有効開始日時(UNIXタイム)
  • validTo_time_t … 証明書の有効期限切れ日時(UNIXタイム)
  • signatureTypeSN … 署名アルゴリズム

まとめ

  • stream_socket_client() で SSL サイトに接続し、証明書をキャプチャできる
  • openssl_x509_parse() で配列に変換し、詳細を取り出せる
  • ドメイン名・発行者・有効期間などがプログラムから確認可能

試験対策としても覚えておくと、「SSL証明書に関する関数の用途」を問われる問題に対応できるでしょう。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次