tohokuaikiのチラシの裏

技術的ネタとか。

acmephp/sslを使ってPHPでSSLの秘密鍵ファイル・CSRファイルを発行する方法

このライブラリであっという間にできてしまった。

acmephp.github.io

acmephp/sslはバージョン2.1、PHPは8.3.6でopensslモジュールは必須。

やりたいこと

以下の2つ

使い方

使い方というか、コード見た方が早そう。

とりあえずcomposerでインストール

composer require acmephp/ssl

コード

<?php
require_once __DIR__."/vendor/autoload.php";

use AcmePhp\Ssl\CertificateRequest;
use AcmePhp\Ssl\DistinguishedName;
use AcmePhp\Ssl\Generator\KeyPairGenerator;
use AcmePhp\Ssl\Signer\CertificateRequestSigner;
use AcmePhp\Ssl\Generator\RsaKey\RsaKeyOption;

// キー長の設定
$keyOption = new RsaKeyOption(2048);
$keyPairGenerator = new KeyPairGenerator();

// ノーパスの秘密鍵ファイルを作成
$keyPair = $keyPairGenerator->generateKeyPair($keyOption);
$pem = $keyPair->getPrivateKey()->getPEM();
file_put_contents('servername_nopass.key', $pem);

// ノーパスの秘密鍵ファイルからパスフレーズ有の秘密鍵ファイルを作成
// パスフレーズの設定
$passphrase = 'my-pass-phrase';
openssl_pkey_export($pem, $output, $passphrase);
file_put_contents('servername.key', $output);

// CSRの発行に必要なパラメータ
$distinguishedName = new DistinguishedName(
    'example.com',  // Common Name (CN)
    'US',           // Country (C)
    'California',   // State (ST)
    'San Francisco',// Locality (L)
    'Example Inc.', // Organization (O)
    'IT Department' // Organizational Unit (OU)
);
// CSRファイルの作成
$certificateRequest = new CertificateRequest($distinguishedName, $keyPair);
$export = (new CertificateRequestSigner)->signCertificateRequest($certificateRequest);
file_put_contents('server.csr', $export);

作ったCSR認証局からもらったCER証明書のmd5PHPでチェックできる。

tohokuaiki.hateblo.jp