コンテンツにスキップ

Server Certificate

Intermediate CA で署名した TLSサーバー証明書 を作成し、 証明書チェーン を検証する。


Root CA
└─ Intermediate CA
└─ Server Certificate

項目 内容
OS Debian 13.x
OpenSSL 3.5
作業ディレクトリ pki/server
Intermediate CA証明書 ../intermediate/intermediate.crt
Intermediate CA秘密鍵 ../intermediate/intermediate.key
Root CA証明書 ../root/ca.crt
証明書拡張ファイル ../extensions.cnf
ドメイン名 www.example.com
IPアドレス 192.168.1.1

サーバー証明書の発行作業に使用する、パスフレーズ付きの 秘密鍵 を作成する。

Terminal window
openssl genpkey \
-algorithm RSA \
-aes-256-cbc \
-pkeyopt rsa_keygen_bits:2048 \
-out server.key
chmod 600 server.key
オプション 役割
-algorithm RSA RSA鍵を生成する
-aes-256-cbc 秘密鍵をパスフレーズで暗号化する
-pkeyopt rsa_keygen_bits:2048 鍵長を2048ビットにする
-out server.key 秘密鍵を server.key へ保存する
Terminal window
openssl pkey -in server.key -check -noout

期待する結果: Key is valid


サーバー証明書の発行をIntermediate CAへ要求するための CSR を作成する。

Terminal window
openssl req -new \
-key server.key \
-out server.csr
オプション 役割
-new 新しいCSRを作成する
-key server.key CSRへ含める公開鍵と署名に使う秘密鍵を指定する
-out server.csr CSRを server.csr へ保存する

CSRへIntermediate CAの秘密鍵で署名し、サーバー証明書を作成する。

Terminal window
openssl x509 -req \
-in server.csr \
-CA ../intermediate/intermediate.crt \
-CAkey ../intermediate/intermediate.key \
-days 365 -sha256 \
-out server.crt \
-extfile ../extensions.cnf \
-extensions server_cert
オプション 役割
-req 入力ファイルをCSRとして読み込む
-in server.csr 署名するCSRを指定する
-CA ../intermediate/intermediate.crt 署名に使うIntermediate CA証明書を指定する
-CAkey ../intermediate/intermediate.key 署名に使うIntermediate CA秘密鍵を指定する
-days 365 証明書の有効期間を365日にする
-sha256 SHA-256 を使って証明書へ署名する
-out server.crt 証明書を server.crt へ保存する
-extfile ../extensions.cnf 拡張を記述した設定ファイルを読み込む
-extensions server_cert [ server_cert ] セクションを適用する

4. nginx用の証明書チェーンと秘密鍵を作成する

Section titled “4. nginx用の証明書チェーンと秘密鍵を作成する”

nginxの ssl_certificate には、サーバー証明書を先頭、その後ろにIntermediate CA証明書を連結したファイルを指定する。Root CA証明書は通常サーバーから配布せず、クライアントのTrust Storeへ登録する。

Terminal window
cat server.crt ../intermediate/intermediate.crt > fullchain.pem

nginxの自動起動用に、発行用の server.key からパスフレーズを取り除いた配備用秘密鍵を作る。実行時に server.key のパスフレーズを入力する。

Terminal window
openssl pkey \
-in server.key \
-out privkey.pem
chmod 600 privkey.pem

作成後の成果物は次のとおり。

ファイル 内容 配備先
../root/ca.crt Root CA証明書 接続するクライアントのTrust Store
../intermediate/intermediate.crt Intermediate CA証明書 fullchain.pem の2番目
server.crt サーバー証明書 fullchain.pem の先頭
server.key パスフレーズ付き発行用秘密鍵 PKI作業ディレクトリで保管
fullchain.pem サーバー証明書+Intermediate CA証明書 nginxの ssl_certificate
privkey.pem パスフレーズなしの配備用秘密鍵 nginxの ssl_certificate_key

nginxへ配備する場合は、サイト名に合わせたディレクトリへコピーする。

Terminal window
sudo install -d -o root -g root -m 700 \
/etc/nginx/tls/www.example.com
sudo install -o root -g root -m 644 fullchain.pem \
/etc/nginx/tls/www.example.com/fullchain.pem
sudo install -o root -g root -m 600 privkey.pem \
/etc/nginx/tls/www.example.com/privkey.pem

Terminal window
openssl verify \
-CAfile ../root/ca.crt \
-untrusted ../intermediate/intermediate.crt \
-purpose sslserver \
server.crt

期待する結果: server.crt: OK

Terminal window
openssl verify \
-CAfile ../root/ca.crt \
-untrusted ../intermediate/intermediate.crt \
-purpose sslserver \
-verify_hostname www.example.com \
server.crt

期待する結果: server.crt: OK

Terminal window
openssl verify \
-CAfile ../root/ca.crt \
-untrusted ../intermediate/intermediate.crt \
-purpose sslserver \
-verify_ip 192.168.1.1 \
server.crt

期待する結果: server.crt: OK

オプション 役割
-CAfile ../root/ca.crt 信頼するRoot CA証明書を指定する
-untrusted ../intermediate/intermediate.crt チェーン構築に使うIntermediate CA証明書を指定する
-purpose sslserver TLSサーバー証明書として使用できるか検証する
-verify_hostname www.example.com SANに指定したDNS名を検証する
-verify_ip 192.168.1.1 SANに指定したIPアドレスを検証する


  • openssl-genpkey 秘密鍵の生成方法と、鍵生成アルゴリズム固有のオプション。

  • openssl-pkey 秘密鍵・公開鍵の読み込み、表示、変換、整合性確認。

  • openssl-req CSRの作成、Subjectの対話入力、各オプション。

  • openssl-x509 CSRへのCA署名、証明書の作成、表示、変換。

  • openssl-verify 証明書チェーン、DNS名、IPアドレスの検証。

  • x509v3_config basicConstraints、keyUsage、extendedKeyUsage、subjectAltName などのX.509拡張設定形式。