1. 管理番号発行ファイル作成
「FreeBSD - メンテナンス・トラブルシュート - SSL 自前の証明書を作成 - 準備」で、バージョンに対応した、準備を行っているものとします。
証明書ファイルに対する管理番号発行ファイルとそのデータベースを作成します。
以下、すべて「root」ユーザ権限で。
cd /etc/ssl/demoCA
echo 01 > serial
この場合、管理番号は 1 です。
2. プライベートキーと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 ビットのキーペアを作ることを意味します。
コマンド入力後、以下が表示されます。
Generating a 2048 bit RSA private key
............+++
...........+++
writing new private key to '/etc/ssl/demoCA/private/cakey.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) [Tokyo]: ← 都道府県名
Locality Name (eg, city) [Chiyoda]: ← 市町村名
Organization Name (eg, company) [FOO]: ← 会社名・団体名
[]: ← 部署名
Common Name (e.g. server FQDN or YOUR name) [*.foo.ne.jp]: ← ドメイン名
Email Address [bar@foo.ne.jp]: ← サーバ管理者のメールアドレス
ここで前ページで設定した、証明書作成用のコンフィグレーションファイルが使用されます。
デフォルト値が設定された状態となっていますので、ほとんどの項目はそのまま Enter で進むことができるはずです。
この手順によって、以下のファイルが作成されます。
/etc/ssl/demoCA/cacert.pem CA証明書
/etc/ssl/demoCA/private/cakey.pem プライベートキー
3. ホストキーとホスト証明書作成
ホストキーとホスト証明書とを作成します。
cd /etc/ssl/demoCA
openssl req -newkey rsa:2048 -keyout /etc/ssl/demoCA/newkey.pem -out /etc/ssl/demoCA/newreq.pem
コマンド入力後、以下が表示されます。
Generating a 2048 bit RSA private key
....................................................................................................+++
....+++
writing new private key to '/etc/ssl/demoCA/newkey.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) [Tokyo]: ← 都道府県名
Locality Name (eg, city) [Chiyoda]: ← 市町村名
Organization Name (eg, company) [FOO]: ← 会社名・団体名
[]: ← 部署名
Common Name (e.g. server FQDN or YOUR name) [*.foo.ne.jp]: ← ドメイン名
Email Address [bar@foo.ne.jp]: ← サーバ管理者のメールアドレス
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
最後に
A challenge password []:
An optional company name []:
と聞いてくるのは、別名があるときにオプションとして入力を求めていますので別段、別名を必要としないのであれば、そのまま [Enter] を 2 回入力してください。
パスワードは「2. プライベートキーとCA証明書の作成」で使用したものと同じパスワードを入力してください。
この手順によって、以下のファイルが作成されます。
/etc/ssl/demoCA/newkey.pem ホストキー
/etc/ssl/demoCA/newreq.pem 証明書要求ファイル
4. パスワードなしのホストキー作成
「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 ホストキー(パスワードなし)
5. データベース・証明書要求ファイルの作成と署名
データベースと証明書要求ファイルの作成と署名を行います。
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: 証明書の有効期限の開始日を表示
Not After : 証明書の有効期限の終了日を表示
Subject:
countryName = 証明書の国名を表示
stateOrProvinceName = 証明書の県名を表示
organizationName = 証明書の組織名を表示
commonName = ドメイン名を表示
emailAddress = 管理者のメールアドレスを表示
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
E1:ED:B3:7A:35:B5:C3:F6:73:03:70:A7:A2:F6:42:CD:15:4C:43:4F
X509v3 Authority Key Identifier:
keyid:C4:DF:83:0D:01:4B:F3:75:6C:0C:12:0F:19:E2:B2:D2:36:93:60:73
Certificate is to be certified until 証明書の有効期限の終了日を表示 (3650 days)
Sign the certificate? [y/n]:y サインするかを聞いてくるので「y」を入力
1 out of 1 certificate requests certified, commit? [y/n] コミットするかを聞いてくるので「y」を入力
Write out database with 1 new entries
Data Base Updated
ここでも「2. プライベートキーとCA証明書の作成」で使用したものと同じパスワードを入力してください。
このとき、データベースと管理番号が更新され、以下のファイルが作成されます。
/etc/ssl/demoCA/cert.pem サーバ証明書
/etc/ssl/demoCA/index.txt.attr 証明書インデックス定義
/etc/ssl/demoCA/index.txt.old 証明書インデックスの旧ファイル
/etc/ssl/demoCA/serial.old 証明書シリアル番号の1つ前(作成するごとにインクリメント)
6. クライアント用証明書の作成
クライアント用証明書を作成します。
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 PEM pass phrase: ← パスワードを入力
Enter Export Password: ← クライアント証明書用パスワードを入力
Verifying password - Enter Export Password: ← クライアント証明書用パスワード再入力
1行目のパスワードは、「2. プライベートキーとCA証明書の作成」で入力したパスワードと同一です。
その後は、クライアントがクライアント証明書を取り込む時のパスワードです。
サーバ証明書用のパスワードとクライアント証明書用のパスワードは、別物です。
別に同じパスワードにしてもよいのですが、安全の為には別々のパスワードにするべきです。
7. 結果の確認
ここまでの手順で「/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
という構成になっているはずです。
これらの使い方は、それぞれのバージョンのウェブサーバの項でご確認ください。