【PHP8.x】openssl_csr_new関数の使い方
openssl_csr_new関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
openssl_csr_new関数は、X.509証明書署名要求(CSR: Certificate Signing Request)を新しく生成するために使用されるPHPのOpenSSL拡張機能の関数です。CSRは、ウェブサイトをHTTPS化する際などに、認証局(CA)に提出し、SSL/TLS証明書を発行してもらうために必要なデータとなります。
この関数は、主に三つの引数を受け取ります。第一引数には、証明書の所有者情報を連想配列で指定します。これには、国名、都道府県名、組織名、そしてウェブサイトのドメイン名などを表すコモンネームが含まれます。第二引数には、このCSRに対応する秘密鍵を指定します。秘密鍵は、openssl_new_key関数などで事前に生成しておく必要があります。第三引数には、CSRの生成に関する追加のオプション(例えば、署名アルゴリズムやハッシュ関数など)を連想配列で指定できます。
openssl_csr_new関数は、成功すると新しく生成されたCSRを表すOpenSSL CSRリソースを返します。もしオプションでPEM形式での出力が指定されている場合は、PEMエンコードされた文字列としてCSRを返します。関数の実行に失敗した場合はfalseが返されます。この関数を利用することで、プログラム上でSSL/TLS証明書取得に必要なCSRを安全かつ自動的に生成することが可能になり、セキュリティを強化したウェブアプリケーションの開発に役立ちます。秘密鍵の取り扱いには十分な注意を払う必要があります。
構文(syntax)
1<?php 2$private_key_resource = openssl_pkey_new(); 3 4$distinguished_names = [ 5 "countryName" => "JP", 6 "stateOrProvinceName" => "Tokyo", 7 "localityName" => "Shibuya-ku", 8 "organizationName" => "MyCompany", 9 "commonName" => "www.example.com", 10 "emailAddress" => "webmaster@example.com" 11]; 12 13$options = [ 14 "digest_alg" => "sha256", 15 "private_key_bits" => 2048, 16]; 17 18$extra_attributes = [ 19 "challengePassword" => "mySecretPassword", 20]; 21 22$csr_resource = openssl_csr_new( 23 $distinguished_names, 24 $private_key_resource, 25 $options, 26 $extra_attributes 27);
引数(parameters)
array $distinguished_names, OpenSSLCertificateSigningRequest|OpenSSLAsymmetricKey|array|string &$private_key, ?array $options = null, ?array $extra_attributes = null
- array $distinguished_names: CSR (証明書署名要求) に含める識別名 (DN) の情報を連想配列で指定します。各キーはOID (Object Identifier) またはそのエイリアス (例: "commonName", "countryName") で、値は対応する文字列です。
- OpenSSLCertificateSigningRequest|OpenSSLAsymmetricKey|array|string &$private_key: CSR の生成に使用する秘密鍵を指定します。既存の
OpenSSLAsymmetricKeyオブジェクト、鍵を保持する配列、または鍵ファイルパスの文字列を指定できます。指定した鍵は、CSR に署名するために使用されます。 - ?array $options = null: CSR の生成に関する追加オプションを指定する連想配列です。例えば、ハッシュアルゴリズムや鍵の強度などを設定できます。
- ?array $extra_attributes = null: CSR に含める追加属性を指定する連想配列です。
戻り値(return)
OpenSSLCertificateSigningRequest|false
openssl_csr_new 関数は、CSR (Certificate Signing Request) オブジェクト、または処理に失敗した場合は false を返します。
サンプルコード
PHP openssl_csr_newでCSRを生成する
1<?php 2 3// CSR (証明書署名要求) を生成するサンプル 4function generateCsr(): void 5{ 6 // 識別名 (Distinguished Name) の設定 7 $dn = [ 8 "countryName" => "JP", // 国コード 9 "stateOrProvinceName" => "Tokyo", // 都道府県 10 "localityName" => "Chiyoda-ku", // 市区町村 11 "organizationName" => "Example Corp", // 組織名 12 "organizationalUnitName" => "IT Department", // 部署名 13 "commonName" => "example.com", // コモンネーム (ドメイン名) 14 "emailAddress" => "admin@example.com" // メールアドレス 15 ]; 16 17 // 秘密鍵の生成 18 $privateKey = openssl_pkey_new([ 19 "private_key_bits" => 2048, // 鍵長 20 "private_key_type" => OPENSSL_KEYTYPE_RSA, // 鍵の種類 21 ]); 22 23 // CSR の生成 24 $csr = openssl_csr_new($dn, $privateKey); 25 26 if ($csr === false) { 27 echo "CSR の生成に失敗しました。\n"; 28 return; 29 } 30 31 // CSR を文字列としてエクスポート 32 openssl_csr_export($csr, $csrString); 33 34 // 秘密鍵を文字列としてエクスポート (パスフレーズなし) 35 openssl_pkey_export($privateKey, $privateKeyString); 36 37 // CSR と秘密鍵をファイルに保存 (必要に応じて) 38 file_put_contents("csr.pem", $csrString); 39 file_put_contents("private.key", $privateKeyString); 40 41 echo "CSR と秘密鍵が生成されました。\n"; 42 echo "CSR:\n" . $csrString . "\n"; 43 echo "秘密鍵:\n" . $privateKeyString . "\n"; 44} 45 46generateCsr(); 47 48?>
openssl_csr_new関数は、PHPでCSR(証明書署名要求)を生成するために使用します。この関数は、X.509証明書を認証局に要求する際に必要なデータを作成します。
引数$distinguished_namesは、CSRに含める識別名(DN)を配列で指定します。DNには、国コード、都道府県名、組織名、コモンネーム(ドメイン名)などの情報が含まれます。$private_keyは、秘密鍵を指定します。これは、openssl_pkey_new関数などで生成されたOpenSSLAsymmetricKeyオブジェクト、もしくは秘密鍵のリソースID、または秘密鍵の文字列を指定します。$optionsはCSR生成に関するオプションを配列で指定できます(省略可能)。$extra_attributesは追加属性を配列で指定できます(省略可能)。
サンプルコードでは、まずCSRに含める識別名を配列 $dn に設定します。次に、openssl_pkey_new関数を使って秘密鍵を生成します。この秘密鍵は、CSRの署名に使用されます。そして、openssl_csr_new関数に識別名と秘密鍵を渡してCSRを生成します。
関数が成功すると、OpenSSLCertificateSigningRequestオブジェクトが返されます。失敗した場合はfalseが返されます。生成されたCSRは、openssl_csr_export関数を使って文字列としてエクスポートできます。同様に、openssl_pkey_export関数を使って秘密鍵も文字列としてエクスポートできます。これらの文字列をファイルに保存することで、後で認証局にCSRを提出したり、秘密鍵を保管したりできます。
openssl_csr_new関数は、証明書署名要求(CSR)を生成する関数です。引数$distinguished_namesは必須で、CSRに含める組織情報などを配列で指定します。$private_keyには、秘密鍵のリソースまたは鍵情報を格納した配列を渡します。サンプルコードのようにopenssl_pkey_new関数で事前に秘密鍵を生成する方法が推奨されます。CSR生成後、openssl_csr_export関数で文字列として取り出し、ファイルに保存できます。秘密鍵も同様にopenssl_pkey_export関数で取り扱えます。秘密鍵の管理には十分注意し、安全な場所に保管してください。本番環境では、秘密鍵へのアクセス制限を適切に設定することが重要です。