【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関数で取り扱えます。秘密鍵の管理には十分注意し、安全な場所に保管してください。本番環境では、秘密鍵へのアクセス制限を適切に設定することが重要です。

関連コンテンツ