English

プライベート認証局における証明書の作成手順

概要

SINETStreamでSSL/TLS接続を行うために必要となる証明書をプライベート認証局にて作成する。

この文書のおもな記述の流れを以下に示す。

  1. 設定手順の前提条件について
  2. プライベート認証局の構築手順
  3. サーバ証明書の作成
  4. クライアント証明書の作成

前提条件

設定手順の記述を簡潔にするために、ここでは以下の前提条件をおく。

設定例を示す場合のホスト名などの値を以下に示す。

実際に設定を行う際は、以下の値に対応する箇所を環境に合わせて適宜変更すること。

プライベート認証局を構築する

プライベート認証局を構築する。 ここで示す手順は Ubuntu 24 で実行することを前提としている。

プライベート認証局はブローカーを実行している環境に構築する必要はない。

具体的な手順を以下に示す。

openssl パッケージをインストールする。

インストール済であればスキップしてよい。

$ sudo apt -y install openssl

証明書や秘密鍵などを格納するディレクトリを作成する。

$ sudo mkdir -p /etc/ssl/certs /etc/ssl/crl /etc/ssl/newcerts /etc/ssl/private

OpenSSLの設定ファイルを変更し、プライベート認証局のために必要となる設定を行う。以下のパラメータを変更する。

openssl.cnf[ CA_default ]セクションを以下のように書き換える。

デフォルトの openssl.cnf では copy_extensions, unique_subjectともにコメントアウトされているので、 行頭のコメント記号 # を削除すればよい。

[ CA_default ]
dir             = /etc/ssl              # Where everything is kept
(中略)
unique_subject  = no                    # Set to 'no' to allow creation of
                                        # several ctificates with same subject.
(中略)
# Extension copying option: use with caution.
copy_extensions = copy

プライベート認証局が署名した証明書を記録するためのファイル index.txt を作成する。

$ sudo touch /etc/ssl/index.txt

CA証明書のCSRと秘密鍵を作成する。

$ sudo openssl req -new -keyout /etc/ssl/private/cakey.pem \
       -out /etc/ssl/careq.pem -nodes \
       -subj /C=JP/ST=Example_State/O=Example_Organization/CN=private-ca

自己署名によるCA証明書を作成する。

$ sudo openssl ca -batch -in /etc/ssl/careq.pem -selfsign -extensions v3_ca \
       -keyfile /etc/ssl/private/cakey.pem -days 3650 -create_serial \
       -out /etc/ssl/cacert.pem

作成したCA証明書/etc/ssl/cacert.pemの内容を確認する。

$ openssl x509 -in /etc/ssl/cacert.pem -noout -text

以下のような出力内容が表示される。

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            ef:f1:65:60:87:be:24:2d
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=JP, ST=Example_State, O=Example_Organization, CN=private-ca
        Validity
            Not Before: Feb 01 00:00:00 2020 GMT
            Not After : Jan 31 00:00:00 2023 GMT
        Subject: C=JP, ST=Default_Organization, O=Default_Organization, CN=private-ca
(中略)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                73:16:96:F1:00:79:31:FE:16:FD:73:C7:E7:C9:99:02:7D:0C:50:68
            X509v3 Authority Key Identifier:
                keyid:73:16:96:F1:00:79:31:FE:16:FD:73:C7:E7:C9:99:02:7D:0C:50:68

            X509v3 Basic Constraints:
                CA:TRUE
(略)

サーバ証明書の秘密鍵、証明書を作成する

サーバ証明書を作成する。

はじめに、証明書のSAN(subjectAltName)にサーバのホスト名を追加するための設定を openssl.cnf に行う。以下に示す内容を openssl.cnfに追記する。

DNS = の後のホスト名を指定する箇所は実際の環境に合わせて変更すること。

(略)
[ req ]
(中略)
req_extensions = v3_req
(中略)
[ v3_req ]
subjectAltName = @alt_names
(中略)
[ alt_names ]
DNS = broker.example.org

サーバ証明書のCSRと秘密鍵を作成する。-keyoutに秘密鍵の出力ファイル名、-outにCSRの出力ファイル名、 -subjに証明書のサブジェクトを指定する。

$ sudo openssl req -new -keyout /etc/ssl/private/broker.key \
       -out /etc/ssl/broker.csr -nodes -subj /C=JP/CN=broker.example.org

CA証明書で署名をおこない、サーバ証明書を作成する。-keyfile, -certにCA証明書の秘密鍵と証明書のファイル名を、 -inにサーバ証明書のCSRを、-outに証明書の出力ファイル名を指定する。

$ sudo openssl ca -batch -keyfile /etc/ssl/private/cakey.pem \
      -cert /etc/ssl/cacert.pem -in /etc/ssl/broker.csr \
      -out /etc/ssl/certs/broker.crt -policy policy_anything

作成したサーバ証明書/etc/ssl/certs/broker.crtの内容を確認する。

$ openssl x509 -in /etc/ssl/certs/broker.crt -noout -text

以下のような出力内容が表示される。

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            ef:f1:65:60:87:be:24:2e
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=JP, ST=Example_State, O=Example_Organization, CN=private-ca
        Validity
            Not Before: Feb 01 00:00:00 2020 GMT
            Not After : Jan 31 00:00:00 2023 GMT
        Subject: C=JP, CN=broker
(中略)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
(中略)
            X509v3 Subject Alternative Name:
                DNS:broker.example.org
(後略)

クライアント認証のための秘密鍵、証明書を作成する

クライアント証明書のCSRと秘密鍵を作成する。-keyoutに秘密鍵の出力ファイル名、-outにCSRの出力ファイル名、 -subjに証明書のサブジェクトを指定する。

$ sudo openssl req -new -keyout /etc/ssl/private/client0.key \
       -out /etc/ssl/client0.csr -nodes -subj /C=JP/CN=client0

CA証明書で署名をおこない、クライアント証明書を作成する。-keyfile, -certにCA証明書の秘密鍵と証明書のファイル名を、 -inに証明書のCSRを、-outに証明書の出力ファイル名を指定する。

$ sudo openssl ca -batch -keyfile /etc/ssl/private/cakey.pem \
      -cert /etc/ssl/cacert.pem -in /etc/ssl/client0.csr \
      -out /etc/ssl/certs/client0.crt -policy policy_anything

作成したクライアント証明書/etc/ssl/certs/client0.crtの内容を確認する。

$ openssl x509 -in /etc/ssl/certs/client0.crt -noout -text

以下のような出力内容が表示される。

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            ef:f1:65:60:87:be:24:2f
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=JP, ST=Example_State, O=Example_Organization, CN=private-ca
        Validity
            Not Before: Feb 01 00:00:00 2020 GMT
            Not After : Jan 31 00:00:00 2023 GMT
        Subject: C=JP, CN=client0
(後略)