SSL 自前の証明書を作成 - 作成 FreeBSD 14.0 RELEASE 以降

 クラウディア
1. 概要
2. 管理番号発行ファイル作成
3. プライベートキーとCA証明書作成
4. ホストキーとホスト証明書作成
5. パスワードなしのホストキー作成
6. データベース・証明書要求ファイルの作成と署名
7. クライアント用証明書の作成
8. 結果の確認

1. 概要

 証明書を作り始めたのが、いつ頃か覚えていないのですが、作り始めて以来、この手順は、ほぼ変わることなかったのですが。  今回、「FreeBSD 14.0 RELEASE」へインストールする際、コマンドを実行するときに表示されるメッセージがかかわっているようです。  なので、改めて書き直します。  「FreeBSD - メンテナンス・トラブルシュート - SSL 自前の証明書を作成 - 準備」で、バージョンに対応した、準備を行っているものとします。

2. 管理番号発行ファイル作成

 証明書ファイルに対する管理番号発行ファイルとそのデータベースを作成します。  以下、すべて「root」ユーザ権限で。

cd /etc/ssl/demoCA
echo 01 > serial
 この場合、管理番号は「1」です。

3. プライベートキーとCA証明書作成

 プライベートキーと「CA」証明書とを作成します。  (「CA」は、「Certification Authority(認証局)」の略)

cd /etc/ssl/demoCA
openssl req -x509 -days 3650 -newkey rsa:2048 -keyout /etc/ssl/demoCA/private/cakey.pem -out /etc/ssl/demoCA/cacert.pem
 「-x509」は、証明書のアルゴリズム「X.509」。  「-days 3650」は、証明書の有効期間(この場合、約10年)。  「-newkey rsa:2048」は、2048 ビットのキーペアを作ることを意味します。  コマンド入力後、以下が表示されます。

.+...+..+.......+.....+...+............+.+.....+.+.....+....+.....+++++++++++++++++++++++*.+.

・・・	略	・・・

+...+.....+......+.+..+.+..............+...+....+........+........+++++++++++++++++++++++++++
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
JP [JP]:
State or Province Name (full name) [...]:
Locality Name (eg, city) [...]:
Organization Name (eg, company) [...]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) [...]:
Email Address [...]:
 ここで前ページで設定した、証明書作成用のコンフィグレーションファイルが使用されます。  「Enter PEM pass phrase:」「Verifying - Enter PEM pass phrase:」の箇所は、証明書用のパスワードを入力して Enter です。  入力した内容は、「*」も含め、エコーバックされませんのでご注意ください。  「JP [JP]:」の箇所は、国名の2文字を入力します。ここで、「/etc/ssl/openssl.cnf」で設定した値が有効になってきます。  「JP」であれば、そのまま、Enter。  「State or Province Name (full name) [...]:」の箇所は、都道府県名です。設定した値でよければ、そのまま、Enter。  「Locality Name (eg, city) [...]:」の箇所は、市町村名です。設定した値でよければ、そのまま、Enter。  「Organization Name (eg, company) [...]:」の箇所は、組織名です。設定した値でよければ、そのまま、Enter。  「Organizational Unit Name (eg, section) []:」の箇所は、部署名です。必要であれば、何か入力して、Enter。  「Common Name (e.g. server FQDN or YOUR name) [...]:」の箇所は、ドメイン名です。設定した値でよければ、そのまま、Enter。  「Email Address [...]:」の箇所は、管理者のメールアドレスです。設定した値でよければ、そのまま、Enter。  デフォルト値が設定された状態となっていますので、ほとんどの項目はそのまま Enter で進むことができるはずです。  この手順によって、以下のファイルが作成されます。

/etc/ssl/demoCA/cacert.pem         CA証明書
/etc/ssl/demoCA/private/cakey.pem  プライベートキー

4. ホストキーとホスト証明書作成

 ホストキーとホスト証明書とを作成します。

cd /etc/ssl/demoCA
openssl req -newkey rsa:2048 -keyout /etc/ssl/demoCA/newkey.pem -out /etc/ssl/demoCA/newreq.pem
 コマンド入力後、以下が表示されます。

....+.........+.........+.+...+....................+.++++++++++++++++++++++++++++++

・・・	略	・・・

+...+....+...........+..........+.....+...+++++++++++++++++++++++++++++++++++++++++
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
JP [JP]:
State or Province Name (full name) [...]:
Locality Name (eg, city) [...]:
Organization Name (eg, company) [...]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) [...]:
Email Address [...]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
 「Enter PEM pass phrase:」「Verifying - Enter PEM pass phrase:」の箇所は、前項と同じパスワードを入力します。  「JP [JP]:」から「Email Address [...]:」は、前項と同様の内容です。  最後に。

A challenge password []:
An optional company name []:
 と聞いてくるのは、別名があるときにオプションとして入力を求めていますので別段、別名を必要としないのであれば、そのまま [Enter] を 2 回入力してください。  この手順によって、以下のファイルが作成されます。

/etc/ssl/demoCA/newkey.pem         ホストキー
/etc/ssl/demoCA/newreq.pem         証明書要求ファイル

5. パスワードなしのホストキー作成

 「3. ホストキーとホスト証明書の作成」で作成したホストキーを使用しますと、apache の起動のたびにパスワードを聞いてきますので、自動起動できなくなります。  ホストキーをパスワード入力なしで使えるように、以下のコマンドでパスワードなしのホストキーを作成します。

cd /etc/ssl/demoCA
openssl rsa -in newkey.pem -out nokey.pem
 コマンド入力後、以下が表示されます。

Enter pass phrase for newkey.pem:
writing RSA key
 ここでも「2. プライベートキーとCA証明書の作成」で使用したものと同じパスワードを入力してください。  以下のパスワードなしのホストキーファイルが作成されます。

/etc/ssl/demoCA/nokey.pem          ホストキー(パスワードなし)

6. データベース・証明書要求ファイルの作成と署名

 データベースと証明書要求ファイルの作成と署名を行います。

cd /etc/ssl
rm -f /etc/ssl/demoCA/index.txt
touch /etc/ssl/demoCA/index.txt
openssl ca -in /etc/ssl/demoCA/newreq.pem -days 3650 -out /etc/ssl/demoCA/cert.pem -notext
 「-days 3650」は、証明書の有効期間を日単位(この場合は約10年)で示します。  コマンド入力後、以下が表示されます。

Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for /etc/ssl/demoCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Dec 25 02:39:32 2023 GMT
            Not After : Dec 22 02:39:32 2033 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = ...
            organizationName          = ...
            commonName                = ...
            emailAddress              = ...
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Subject Key Identifier:
                E8:D4:4F:A2:58:BC:9F:AE:41:5D:06:06:1F:CC:C9:41:DF:53:E7:EA
            X509v3 Authority Key Identifier:
                3D:4B:35:37:BC:63:1F:C4:41:74:29:E1:2B:70:93:46:8B:D1:75:1D
Certificate is to be certified until Dec 22 02:39:32 2033 GMT (3650 days)
Sign the certificate? [y/n]:

1 out of 1 certificate requests certified, commit? [y/n]
Write out database with 1 new entries
Database updated
 「Enter pass phrase for /etc/ssl/demoCA/private/cakey.pem:」の箇所は「2. プライベートキーとCA証明書の作成」で使用したものと同じパスワードを入力してください。  「Not Before:」「Not After :」には、証明書の有効期限の開始、終了日が表示されているはずです。  「Subject:」以下には、「2. プライベートキーとCA証明書の作成」で、設定した、国名から管理者のメールアドレスまでが設定されたことを表示しているはずです。  「Sign the certificate? [y/n]:」は、サインするかを聞いてくるので、yEnter。  「1 out of 1 certificate requests certified, commit? [y/n]」は、コミットするかを聞いてくるので、yEnter。  このとき、データベースと管理番号が更新され、以下のファイルが作成されます。

/etc/ssl/demoCA/cert.pem		サーバ証明書
/etc/ssl/demoCA/index.txt.attr	証明書インデックス定義
/etc/ssl/demoCA/index.txt.old	証明書インデックスの旧ファイル
/etc/ssl/demoCA/serial.old		証明書シリアル番号の1つ前(作成するごとにインクリメント)

7. クライアント用証明書の作成

 クライアント用証明書を作成します。

openssl pkcs12 -export -inkey /etc/ssl/demoCA/newkey.pem -in /etc/ssl/demoCA/cert.pem -certfile /etc/ssl/demoCA/cacert.pem -out /etc/ssl/demoCA/newcerts/仮名.pfx
 これも、1 行入力です。  コマンド入力後、以下が表示されます。

Enter pass phrase for /etc/ssl/demoCA/newkey.pem:
Enter Export Password:
Verifying - Enter Export Password:
 「Enter pass phrase for /etc/ssl/demoCA/newkey.pem:」は、「2. プライベートキーとCA証明書の作成」で入力したパスワードと同一のものを入力します。  その後は、クライアントがクライアント証明書を取り込む時のパスワードです。  サーバ証明書用のパスワードとクライアント証明書用のパスワードは、別物です。  別に同じパスワードにしてもよいのですが、安全の為には別々のパスワードにするべきです。

8. 結果の確認

 ここまでの手順で「/etc/ssl/demoCA」の配下は

|-- cacert.pem
|-- cert.pem
|-- crl
|-- index.txt
|-- index.txt.attr
|-- index.txt.old
|-- newcerts
|   |-- 01.pem
|   `-- user.pfx
|-- newkey.pem
|-- newreq.pem
|-- nokey.pem
|-- private
|   `-- cakey.pem
|-- serial
`-- serial.old
 という構成になっているはずです。  これらの使い方は、それぞれのバージョンのウェブサーバの項でご確認ください。
ハイスピードプラン5G CONNECT