【PHP8.x】openssl_spki_new関数の使い方

作成日: 更新日:

openssl_spki_new関数は、SPKI(Signed Public Key and Challenge)形式の署名付き公開鍵とチャレンジを生成する関数です。この関数はPHPのOpenSSL拡張の一部として提供されており、特にバージョン8.4.12以降で利用可能です。

SPKIとは、特定の公開鍵に対して、その公開鍵の所有者であることを示す任意のチャレンジ文字列を付加し、さらに対応する秘密鍵で署名することで、公開鍵の信頼性と所有者の認証を強化した形式を指します。このメカニズムは、公開鍵の正当性を証明し、第三者による改ざんやなりすましを防ぐことを目的としています。

この関数は、主にウェブサーバーやアプリケーション間で公開鍵を安全にやり取りしたり、簡易な認証メカニズムを構築したりする際に利用されます。引数として、署名を行うための秘密鍵、SPKIに含める任意のチャレンジ文字列、そして署名に使用するダイジェストアルゴリズム(例えばsha256のような)を指定する必要があります。

処理が成功すると、生成されたSPKIはPEM形式の文字列として返されます。この文字列には、公開鍵、チャレンジ、およびその両方に対する秘密鍵による署名が含まれており、他のシステムへ安全に提供することが可能になります。これにより、受け取った側はSPKI内の情報と署名を検証することで、公開鍵の出所や正当性を確認できます。もし、引数の指定が不正であるなど処理に失敗した場合は、falseが返されます。セキュリティ関連の操作において、公開鍵の信頼性を確立するために重要な役割を果たす関数です。

基本的な使い方

構文(syntax)

<?php
$privateKeyResource = openssl_pkey_new();
openssl_pkey_export($privateKeyResource, $pemPrivateKeyString);
$challengeString = 'your_application_challenge';
$subjectPublicKeyInfo = openssl_spki_new($pemPrivateKeyString, $challengeString);
echo $subjectPublicKeyInfo;
?>

引数(parameters)

OpenSSLAsymmetricKey $private_key, string $challenge, int $digest_algo = OPENSSL_ALGO_MD5

  • OpenSSLAsymmetricKey $private_key: SPKI証明書を生成するための非公開鍵を指定します。
  • string $challenge: SPKI証明書に含めるチャレンジ文字列を指定します。
  • int $digest_algo = OPENSSL_ALGO_MD5: SPKI証明書のハッシュ計算に使用するアルゴリズムを指定します。デフォルトはMD5です。

戻り値(return)

string|false

SPKI(Subject Public Key Info)構造体を表すDERエンコードされた文字列を返します。失敗した場合はfalseを返します。

【PHP8.x】openssl_spki_new関数の使い方 | いっしー@Webエンジニア