1. 記事一覧 >
  2. ブログ記事
category logo

EJBCAのTLS証明書発行までのチュートリアルを日本語訳してやってみた

(更新) (公開)

はじめに

前回記事「EJBCA(PKI および証明書管理アプリ)をビルドしてインストールしてみた」にて、EJBCA(PKI および証明書管理アプリ)をインストールして、とりあえず、管理ページが表示されるところまでやりました。
今回、その続きで、TLS サーバー証明書を発行するところまで EJBCA 公式ドキュメントのチュートリアルを3つやっていきます。


Tutorial - Create your first Root CA using EJBCA
https://doc.primekey.com/ejbca/tutorials-and-guides/tutorial-create-your-first-root-ca-using-ejbca
チュートリアル - EJBCA を使用して最初のルート CA を作成する


Tutorial - Create a PKI Hierarchy in EJBCA
https://doc.primekey.com/ejbca/tutorials-and-guides/tutorial-create-a-pki-hierarchy-in-ejbca
チュートリアル - EJBCA で PKI 階層を作成する


Tutorial - Issue TLS server certificates with EJBCA
https://doc.primekey.com/ejbca/tutorials-and-guides/tutorial-issue-tls-server-certificates-with-ejbca
チュートリアル - EJBCA を使用して TLS サーバー証明書を発行する


の3つです。
この記事では、書いてある通りの手順を実施していきますので、実質日本語版チュートリアルになります。


この記事は、勝手に日本語訳して実施しているだけで、EJBCA および Keyfactor 社、PrimeKey の見解とは一切関係ありません。

ときどき原文に無い説明を加筆しています。それについても、EJBCA および Keyfactor 社、PrimeKey の見解とは一切関係ありません。また、一部誤訳、誤解釈等があるかもしれません。ご了承ください。

本記事情報の設定不足、誤りにより何らかの問題が生じても、一切責任を負いません。

主に「鍵」のことを「キー」と表記します。他、EJBCA の言語選択で、日本語に切り替えられますが、英語のままを前提とします。(日本語に切り替えると、メニュー文言とかでググっても情報が出てこなくなるため、おすすめしません!)


最初のルート CA を作成する

EJBCA を使用して最初のルート CA を設定する方法を学びます。


このチュートリアルでは、次の方法を学びます。:
・証明書プロファイルを作成する
・暗号トークンを作成する
・CA を作成する


ステップ 1 - 証明書プロファイルを作成する

初めて EJBCA 管理ページにアクセスすると、作成された管理 CA が表示されます。
これは、管理者用のすべての内部証明書と、たとえば外部 VA または RA への接続に必要な TLS 接続を発行する CA です。
最初の CA を作成するための最初のステップは、証明書プロファイルを作成することです。
証明書プロファイルは、新しい証明書の制約 (使用できるキーや拡張子など) を定義します。
証明書プロファイルの概要については、「証明書プロファイルの概要(Certificate Profiles Overview)」を参照してください。

【 RA(Registration Authority:登録局) 】

RA は、デジタル証明書の登録申請を受け付けて承認を行う機関です。つまり、ユーザーがデジタル証明書を申請すると、RA はその申請を受けて審査を行い、承認します。

【 VA(Validation Authority:検証局) 】

VA は、デジタル証明書が有効かどうかを確認する役割を果たします。具体的には、デジタル証明書が無効になっていないかを確認するために、証明書失効リスト(CRL)を管理しています。


後の手順で CA を作成するためのテンプレートを提供する証明書プロファイルを作成するには、次の手順を実行します。:


1. EJBCA の CA Functions で、Certificate Profiles をクリックします。
Manage Certificate Profiles ページには、多数のデフォルト プロファイルのリストが表示されます。

Manage Certificate Profiles ページ

2. ROOTCA のデフォルト テンプレートによる Clone をクリックして、そのテンプレートを使用して新しいプロファイルを作成します。

ROOTCA Clone

3. 新しい証明書プロファイルに MyRootCAProfileという名前を付け、Create from template をクリックします。

MyRootCAProfile Create from template

4. ニーズに合わせてルート CA プロファイルのデフォルト値を編集するには、リストに表示されている新しく作成した MyRootCAProfile プロファイルを見つけて、Edit をクリックします。

MyRootCAProfile Edit

5. Edit ページで、タイプが Root CA であることを確認し、以下を更新します。
Available Key Algorithms で、RSA を選択します。
Available Bit Lengths で、4096 bits を選択します。
Validity or end date of the certificate(証明書の有効期間または終了日)には 30y(30年) を指定します。

Available Key Algorithms RSA等

6. X.509v3 extensions(X.509v3 拡張機能)で、次の項目をクリアします。
Authority Key ID(権限キーID)

Authority Key ID クリア

Subject Alternative Name(SAN)
Issuer Alternative Name(発行者の別名)

Subject Alternative Name、Issuer Alternative Name クリア

7. Other Data で、LDAP DN order を無効にします。この順序は DISTINGUISHED NAME コンポーネントの古い順序であり、このプロファイルで使用することは推奨されません。

LDAP DN order 無効

8. 証明書プロファイルを保存するには、Save をクリックします。

Save 証明書プロファイルを保存

【 LDAP DN order を無効にします 】

この記述は、証明書プロファイルの設定に関するもので、「LDAP DN order」を無効にすることを指示しています。

「LDAP DN order」は、証明書の「DISTINGUISHED NAME」コンポーネントの順序を決定する設定です。

LDAP(Lightweight Directory Access Protocol)は、ディレクトリサービスを提供するプロトコルで、DN(Distinguished Name)は、LDAP ディレクトリ内のエントリを一意に識別するための名前です。

しかし、この「LDAP DN order」は古い順序付け方式で、現在では推奨されていません。

そのため、このプロファイルでは「LDAP DN order」を無効にし、標準の X.509 順序付けを使用することが推奨されています。

この設定を無効にすることで、DN の順序は X.509 標準に従ったものになります。

【 SAN 】

「SAN」は「Subject Alternative Name」の略称で、「サブジェクトの別名」という意味です。

SSL サーバ証明書に含まれる情報として、コモンネームを含むサブジェクトとは別に「SAN」という拡張領域があります。

SSL サーバ証明書のコモンネームには、FQDN(URL)を 1 つしか設定できませんが、SAN を利用すると、1 枚の証明書で複数のウェブサイトの暗号化通信を実現することが可能になります。

これにより、個別で証明書を発行・管理するよりもコストを抑えることが可能です。


新しく作成された MyRootCAProfile が証明書プロファイルのリストに表示されます。

MyRootCAProfileが証明書プロファイルのリストに表示


ステップ 2 - 暗号トークンを作成する

EJBCA では、暗号キーは暗号トークンに保存されます。 暗号トークンは、ソフト キーストアと呼ばれるデータベース、またはハードウェア セキュリティ モジュール (HSM) に保存できます。
暗号トークンと使用可能なフィールドの詳細については、「暗号トークンの概要(Crypto Tokens Overview)」を参照してください。

暗号トークンは、デジタル証明書や暗号化されたキーなどの情報を保持するデバイスやソフトウェアのことを指します。(キー情報が入った金庫のようなものです。)


以下では、ソフト暗号トークンと次のキーを作成する方法について説明します。:
・Sign key: CA からのデジタル署名に使用されます。
・Default key: CA が実行する必要がある暗号化に使用されます。
・Test key: 通常、ヘルス チェックまたは HSM keep-alive サービスでのみ使用されます。


署名および暗号化キー(default key)ラベルを作成する際に番号を付けておくと、認証局を更新する際に簡単に番号を増やすことができます。


【 HSM 】

HSM(ハードウェアセキュリティモジュール)は、一般的に電子証明書の暗号鍵と鍵管理に関する国際規格を取得しているデバイスです。

具体的な規格としては、以下のものがあります:

FIPS 140-2:米国の連邦情報処理標準です。暗号モジュールのセキュリティ要件を定めています。

Common Criteria(コモンクライテリア):IT 製品のセキュリティ機能を評価するための国際標準です。

これらの規格は、HSM が暗号鍵の生成、保護、管理などのプロセスを安全に行うことを保証します。

【 HSM keep-alive services 】

HSM keep-alive サービスとは、HSM が正常に動作しているかを定期的に確認するためのサービスのことです。このサービスは、HSM が適切に機能していることを確認し、必要に応じて問題を早期に検出する役割を果たします。


ソフト ルート CA 暗号トークンとキーを作成するには、次の手順に従います。:

ここで、「ソフト」の意味は、HSM を使わないという意味です。


1. EJBCA メニューの CA Functions で、Crypto Tokens をクリックします。
2. Create new をクリックし、New Crypto Token ページで以下を指定します。

New Crypto Token ページ

Name: ルート CA 暗号トークンに MyFirstRootCACryptoToken という名前を付けます。
Authentication Code: コンテナーが再起動された場合に暗号トークンをアクティブ化するために使用するパスワードを入力します。このパスワードを覚えておいてください。

「コンテナー」は、EJBCA のデプロイ環境が Docker 前提で言っているようです。

3. Save をクリックしてルート CA 暗号トークンを作成します。

ルート CA 暗号トークンを作成

ここで、Type = SOFT になっていますが、SOFT とは、HSM を使わないで、EJBCA 自身でトークンを持つという意味です。(以降同様に暗黙的に SOFT を選択することになっています。)

4. 次に、3 つのキー ペアを作成します。
signKey という名前フィールドに myFirstRootCaSignKey0001 と指定し、Generate new key pair をクリックしてキーを作成します。

signKeyという名前フィールド


myFirstRootCaSignKey0001 Generate new key pair

・この手順を繰り返して、default のキーを作成します。キーに myFirstRootCaEncryptKey0001 という名前を付け、Generate new key pair をクリックします。

myFirstRootCaEncryptKey0001 Generate

・最後に、テスト キーを作成します。キーに testkey という名前を付け、より短いビット長の RSA 2048 を選択し、Generate new key pair をクリックします。

testkey Generate


これでルート CA 暗号化トークンとキーが作成されたので、引き続き最初の CA を作成できます。


ステップ 3 - CA を作成する

最初のルート CA を作成するには、次の手順に従います。:


1. CA Functions の下にある Certification Authorities をクリックします。
2. Add CA フィールドに "MyFirstRootCA" という名前を入力し、Create をクリックします。

MyFirstRootCA Create

3. Create CA ページで、Crypto Token リストからルート CA 暗号トークン MyFirstRootCACryptoToken (ステップ 2 - 暗号トークンの作成 で作成したもの) を選択します。
certSignKey キーと keyEncryptKey キーは、作成したキーを使用して自動的に選択されます。
defaultKey には、myFirstRootCaEncryptKey0001 を選択します。

keyEncryptKey が - Default key になっていますが、おそらくそれで良いと思われます。

MyFirstRootCACryptoToken 選択

4. 以下を指定します。
a. Subject DN: 「CN = MyFirstRootCA, O = Keyfactor Community, C = SE」と入力します。
b. Validity(有効期間):30y(年)を指定します。
c. LDAP DN order(LDAP DN の順序): Use をクリアします。

Subject DN等

d. CRL Expire Period(CRL の有効期限): 3 mo を入力すると、CRL の有効期間が 3 か月に更新されます。

CRL Expire Period

5. Create をクリックしてルート CA を作成します。

Createをクリックしてルート CA を作成

作成された MyFirstRootCACryptoToken が CA のリストに表示されます。

直上の MyFirstRootCACryptoToken は、誤植と思われます。(2024 年 2 月時点)

MyFirstRootCA が CA のリストに表示されます。

MyFirstRootCA が CA のリストに表示


PKI 階層を作成する

以降、ここまでの手順で見たような画面の掲載は省略します。

EJBCA で多層認証局 (CA) 階層を作成する方法を学習します。


CA の多層階層を作成することをお勧めします。
この設定では、ルート CA (トラスト アンカー) は下位 CA にのみ証明書を発行し、新しい証明書を発行する権限を下位 CA に与えます。
下位 CA は、証明書をエンド エンティティに直接発行したり、追加レベルの下位 CA を作成したりできます。
この主な利点は、ルート CA を厳密に制御して長い有効期間を与えることができるのに対し、下位 CA の有効期間を短くし、必要に応じて取り消すことができることです。
こうすることで、信頼されたルート CA 証明書を更新および置換する必要性が最小限に抑えられます。
異なる下位 CA は、同じ EJBCA インスタンスでホストされている場合でも、異なるチームによって管理することもできます。
たとえば、内部エンティティ用に 1 つの CA と外部エンティティ用に 1 つの CA を使用したり、リージョン全体で異なる CA を使用したり、目的ごとに異なる CA を使用したりすることができます。


このチュートリアルでは、次の方法を学びます。:
・同じ EJBCA インスタンス内にルート CA と下位 CA を作成する
・既存のプロファイルに基づいて新しい証明書プロファイルを作成する
・CRL 配布ポイントの構成
・権限情報アクセス URI の構成


ステップ 1 - 証明書プロファイルの作成

始める前に、実行中の EJBCA インスタンスが必要です。 また、ルート CA プロファイル テンプレートの作成方法については、チュートリアル「EJBCA を使用して最初のルート CA を作成する」を参照してください。


ルート CA 証明書プロファイルの作成

以下に、「最初のルート CA を作成する」チュートリアル で作成した MyRootCAProfile 証明書プロファイルを複製してルート CA 証明書プロファイルを作成する手順を示します。


後の手順でルート CA を作成するための証明書プロファイルを作成するには、次の手順を実行します。:


1. EJBCA の CA Functions で、Certificate Profiles をクリックします。
Manage Certificate Profiles ページには、デフォルトのプロファイルと、
前のチュートリアル「[最初のルート CA を作成する](#anchor1)」で作成したルート CA プロファイルのリストが表示されます。
2. MyRootCAProfile テンプレートの横にある Clone をクリックして、それを新しいルート CA プロファイルを作成するためのベースとして使用します。
3. 新しい証明書プロファイルに MyPKIRootCAProfile という名前を付け、Create from template をクリックします。
4. ニーズに合わせてプロファイル値を編集するには、リストに表示されている新しく作成した MyPKIRootCAProfile を見つけて、Edit をクリックします。
5. Edit ページで、RSA キーの代わりに楕円曲線キーを使用するように次を更新します。
Available Key Algorithms で、ECDSA を選択します。
Available ECDSA curves として、P-256 / prime256v1 / secp256r1 を選択します。

Available Key Algorithms等

6. Save をクリックして、ルート CA 証明書プロファイルを保存します。

【 P-256 / prime256v1 / secp256r1 】

楕円曲線暗号(Elliptic Curve Cryptography, ECC)の一部である楕円曲線デジタル署名アルゴリズム(Elliptic Curve Digital Signature Algorithm, ECDSA)で使用される特定の楕円曲線を指しています。

P-256 / prime256v1 / secp256r1 は、256 ビットのプライムフィールド上の Weierstrass 曲線を指します。ここで、256 は曲線のビット長を示しています。


新しく作成された MyPKIRootCAProfile が証明書プロファイルのリストに表示されます。

MyPKIRootCAProfileが証明書プロファイルのリストに表示


サブ CA 証明書プロファイルの作成

後の手順でサブ CA を作成するための証明書プロファイルを作成するには、次の手順を実行します。:


1. EJBCA Manage Certificate Profiles ページで、SUBCA デフォルト テンプレートの Clone をクリックして、そのテンプレートを使用して新しいプロファイルを作成します。

EJBCA Manage Certificate Profiles ページ = CA Functions - Certificate Profiles です。

2. 新しい証明書プロファイルに MyPKISubCAProfile という名前を付け、Create from template をクリックします。
3. ニーズに合わせてプロファイル値を編集するには、リストに表示されている新しく作成した MyPKISubCAProfile を見つけて、Edit をクリックします。
4. Edit ページで、RSA キーの代わりに楕円曲線キーを使用するように次を更新します。
Available Key Algorithms で、ECDSA を選択します。
Available ECDSA curves として、P-256 / prime256v1 / secp256r1 を選択します。
Signature Algorithm で、Inherit from Issuing CA(発行 CA から継承) が選択されていることを確認します。

Inherit from Issuing CA選択

Validity or end date of the certificate(証明書の有効期間または終了日)には、15y(年)を指定します。
X.509v3 extensions で、以下を更新します。
Path Length Constraint(パスの長さの制約) を選択して 0 に設定すると、このサブ CA はその下にそれ以上のサブ CA を発行できなくなり、エンド エンティティ証明書の発行のみが許可されます。

Path Length Constraintを選択して 0 に設定

X.509v3 extensions - Validation data(X.509v3 拡張機能 - 検証データ)で、以下を更新します。
CRL Distribution Points(CRL 配布ポイント)を有効にします。
Use CA defined CRL Distribution Point(CA 定義の CRL 配布ポイントを使用する)を有効にして、ルート CA の配布ポイントの値を設定できるようにします。
Authority Information Access(権限情報アクセス)を有効にします。
Use CA defined OCSP locator(CA 定義の OCSP ロケーターを使用する) を有効にします。
Use CA defined CA issuer(CA が定義した CA 発行者の使用)を有効にします。

CRL Distribution Points等

Other Data(その他のデータ)で、LDAP DN order(LDAP DN の順序)をクリアします。
5. Save をクリックして、サブ CA 証明書プロファイルを保存します。

新しく作成された MyPKISubCAProfile が証明書プロファイルのリストに表示されます。

MyPKISubCAProfileが証明書プロファイルのリストに表示


ステップ 2 - 暗号トークンを作成する

EJBCA では、暗号キーは暗号トークンに保存されます。 暗号トークンは、ソフト キーストアと呼ばれるデータベース、またはハードウェア セキュリティ モジュール (HSM) に保存できます。
暗号トークンと使用可能なフィールドの詳細については、「暗号トークンの概要(Crypto Tokens Overview)」を参照してください。


以下では、ソフト暗号トークンと次のキーを作成する方法について説明します。:
Sign key: CA からのデジタル署名に使用されます。
Default key: CA が実行する必要がある暗号化に使用されます。
Test key: 通常、ヘルス チェックまたは HSM キープアライブ サービスでのみ使用されます。


署名および暗号化キー(default key)ラベルを作成する際に番号を付けておくと、認証局を更新する際に簡単に番号を増やすことができます。


ルート CA 暗号トークンの作成

ソフト ルート CA 暗号トークンとキーを作成するには、次の手順に従います。:

ここで、「ソフト」の意味は、HSM を使わないという意味です。


1. EJBCA メニューの CA Functions で、Crypto Tokens をクリックします。
2. Create new をクリックし、New Crypto Token ページで以下を指定します。
Name: ルート CA 暗号トークンに MyPKIRootCACryptoToken という名前を付けます。
Authentication Code: コンテナーが再起動された場合に暗号トークンをアクティブ化するために使用するパスワードを入力します。このパスワードを覚えておいてください。
3. Save をクリックしてルート CA 暗号トークンを作成します。
4. 次に、3 つの CA キーを生成します。
signKey という名前フィールドで、myPkiRootCaSignKey0001 と指定し、証明書プロファイルで定義されているように P-256 / prime256v1 / secp256r1 を選択し、Generate new key pair をクリックしてキーを作成します。

正確には、ECDSA P-256 / prime256v1 / secp256r1 を選択です。

ECDSA P-256 / prime256v1 / secp256r1 を選択

・この手順を繰り返して、デフォルトの暗号化キーを作成します。キーに myPkiRootCaEncryptKey0001 という名前を付け、RSA 4096 を選択し、Generate new key pair をクリックします。
・最後に、テスト キーの作成を繰り返します。キーに testKey という名前を付け、CA 署名キーが使用するものとして P-256 / prime256v1 / secp256r1 を選択し、Generate new key pair をクリックします。

これで、ルート CA 暗号トークンとキーが作成されました。

ルート CA 暗号トークンとキーが作成


サブ CA 暗号トークンの作成

ソフト Sub CA 暗号トークンとキーを作成するには、次の手順に従います。:


1. EJBCA メニューの CA Functions で、Crypto Tokens をクリックします。
2. Create new をクリックし、New Crypto Token ページで以下を指定します。
Name: ルート CA 暗号トークンに MyPKISubCACryptoToken という名前を付けます。
Auto-activation: EJBCA がパスワードを保存し、再起動後に再適用できるようにするには、Use を選択して、サブ CA が常に使用できるようにします。
Authentication Code: 自動アクティベーション用のパスワードを入力します。
3. Save をクリックして、サブ CA 暗号トークンを作成します。

サブ CA 暗号トークンを作成

4. 次に、サブ CA 用に同じ 3 つのキーを生成します。
signKey という名前フィールドに myPkiSubCaSignKey0001 を指定し、証明書プロファイルで定義されているように P-256 / prime256v1 / secp256r1 を選択し、Generate new key pair をクリックしてキーを作成します。
・手順を繰り返して、デフォルトの暗号化キーを作成します。キーに myPkiSubCaEncryptKey0001 という名前を付け、RSA 4096 を選択し、Generate new key pair をクリックします。
・最後に、テスト キーの作成を繰り返します。キーに testKey という名前を付け、CA 署名キーが使用するものとして P-256 / prime256v1 / secp256r1 を選択し、Generate new key pair をクリックします。

これで、Sub CA 暗号トークンとキーが作成されました。

Sub CA 暗号トークンとキーが作成


ステップ 3 - CA を作成する

証明書プロファイルと CA キーを作成したので、それらをまとめて CA 階層を作成できます。


CA の階層を決定したら、各証明書の有効期間を決定する必要があります。
経験則として、サブ CA の有効期間は発行 CA の半分である必要があります。
この例の 2 層階層で使用される一般的な設定では、ルート CA を 30 年、第 2 レベルの CA を 15 年に設定します。
これは、ルート CA の存続期間中に、計画されたサブ CA の更新が 1 回必要になることを意味します。

ルート CA の作成

ルート CA を作成するには、次の手順に従います。:


1. CA Functions の下にある Certification Authorities をクリックします。
2. Add CA フィールドに "MyPKIRootCA-G1" という名前を入力し、Create をクリックします。
3. Create CA ページで、以下を更新します。
・Crypto Token リストでルート CA 暗号トークン MyPKIRootCACryptoToken ([ステップ 2 - 暗号トークンの作成](#anchor3) で作成したもの) を選択します。
Signing Algorithm(署名アルゴリズム)として、SHA512withECSDSA を選択します。
・目的の用途に合わせてキーをマップします。certSignKey キーと keyEncryptKey キーは、作成したキーで自動的に選択されます。defaultKey には、myPkiRootCaEncryptKey0001 を選択します。

myPkiRootCaEncryptKey0001を選択

CA Certificate Data(CA 証明書データ)で、次を指定します。
Subject DN: 「CN = My PKI Root CA - G1, O = Keyfactor Community, C = SE」と入力します。
Signed By: Self Signed(自己署名)。
Certificate Profile: [ステップ 1 - 証明書プロファイルの作成](#anchor2) で作成した MyPKIRootCAProfile を選択します。
Validity(有効期間):30y(年)を指定します。
LDAP DN order: Use をクリアします。

Subject DN等

CRL Specific Data(CRL 固有のデータ) で、次を指定します。
CRL Expire Period(CRL 有効期限): 3mo と入力すると、CRL 有効期間が 3 か月に更新されます。
CRL Overlap Time: CRL 自動発行を使用しないため、0m に設定します。

CRL Expire Period等

Default CA defined validation data(デフォルトの CA 定義の検証データ)で、CA によって発行される証明書プロファイルで使用されるデフォルト値を定義します。
Default CRL Distribution Point(デフォルトの CRL 配布ポイント): http://my.pki/crls/MyPKIRootCA-G1.crl
OCSP service Default URI(OCSP サービスのデフォルト URI): http://my.pki/ocsp
CA issuer Default URI(CA 発行者のデフォルト URI): http://my.pki/certs/MyPKIRootCA-G1.crt

Default CRL Distribution Point等

4. Create をクリックしてルート CA を作成します。

【 OCSP 】

OCSP(Online Certificate Status Protocol)は、デジタル証明書(公開鍵証明書)の有効性を TCP/IP ネットワークを通じて問い合わせるためのプロトコルです。これにより、デジタル証明書が何らかの理由で有効期限前に失効している場合でも、その情報を迅速に知ることができます。


作成した MyPKIRootCA-G1 が CA の一覧に表示されます。

MyPKIRootCA-G1 が CA の一覧に表示


サブ CA の作成

サブ CA を作成するには、次の手順に従います。:


1. CA Functions の下にある Certification Authorities(証明機関) をクリックします。
2. Add CA フィールドに "MyPKISubCA-G1" という名前を入力し、Create をクリックします。
3. Create CA ページで、以下を更新します。
Crypto Token リストで、サブ CA 暗号トークン MyPKISubCACryptoToken ([ステップ 2 - 暗号トークンの作成](#anchor3) で作成したもの) を選択します。
Signing Algorithm(署名アルゴリズム)として、SHA256withECSDSA を選択します。
・意図した用途に合わせてキーをマップします。certSignKey キーと keyEncryptKey キーは、作成したキーで自動的に選択されます。defaultKey には、myPkiSubCaEncryptKey0001 を選択します。
CA Certificate Data(CA 証明書データ)で、次を指定します。
Subject DN: 「CN = My PKI Sub CA - G1, O = Keyfactor Community, C = SE」と入力します。
Signed By: ローカルのルート CA によって署名されるようにするには、MyPKIRootCA-G1 を選択します。

下の Certificate Profile を選択する前に Signed By を選択する必要があります。

Certificate Profile: [ステップ 1 - 証明書プロファイルの作成](#anchor2) で作成した MyPKISubCAProfile を選択します。
Validity(有効期間): 15y(年) を指定します。
LDAP DN order: Use をクリアします。

Validity等

CRL Specific Data(CRL 固有のデータ)で、次を指定します。
CRL Expire Period(CRL 有効期限): 3d を入力すると、CRL 有効期間が 3 日に更新されます。
CRL Issue Interval(CRL 発行間隔): CRL の自動発行を有効にし、前の CRL が作成されてから 1 日後に新しい CRL が作成されるようにするには、1d と入力します。
CRL Overlap Time: 発行間隔はすでに設定されており、新しい CRL を作成する必要がある有効期限が切れる前の時間であるオーバーラップを指定する必要がないため、0m に設定します。
Default CA defined validation data(デフォルトの CA 定義の検証データ)で、CA によって発行される証明書プロファイルで使用されるデフォルト値を定義します。
Default CRL Distribution Point(デフォルトの CRL 配布ポイント): http://my.pki/crls/MyPKISubCA-G1.crl
OCSP service Default URI(OCSP サービスのデフォルト URI): http://my.pki/ocsp
CA issuer Default URI(CA 発行者のデフォルト URI): http://my.pki/certs/MyPKISubCA-G1.crt
4. Create をクリックしてサブ CA を作成します。

作成した MyPKISubCA-G1 が CA の一覧に表示されます。

MyPKISubCA-G1 が CA の一覧に表示


これで、ルート CA と下位 CA を含む 2 層の公開キー基盤 (PKI) 階層が作成されました。


TLS サーバー証明書を発行する

EJBCA を使用してエンド エンティティ証明書を手動で発行する方法を学習します。


このチュートリアルでは、次の方法を学びます。:
・サーバー TLS 証明書の証明書プロファイルを作成する
・エンドエンティティプロファイルを作成する
・証明書署名リクエスト (CSR) を作成する
・CSR に基づく証明書の発行


ステップ 1 - 証明書プロファイルの作成

最初のステップは、サーバー TLS 証明書の証明書プロファイルを作成することです。
証明書プロファイルは、新しい証明書の内容と制約を定義します。
たとえば、どのキーのタイプを許可するか、証明書でどの拡張子を使用するかを定義できます。
証明書プロファイルの概要については、「証明書プロファイルの概要(Certificate Profiles Overview)」を参照してください。


サーバー TLS 証明書の証明書プロファイルを作成するには、次の手順を実行します。:


1. EJBCA の CA Functions で、Certificate Profiles をクリックします。
Manage Certificate Profiles ページには、使用可能なプロファイルのリストが表示されます。
2. SERVER テンプレートの横にある Clone をクリックして、新しいプロファイルを作成するためのベースとして使用します。
3. 新しい証明書プロファイルに TLS Server Profile という名前を付け、Create from templateクリックします。
4. ニーズに合わせてプロファイル値を編集するには、リストで新しく作成した TLS Server Profile を見つけて、Edit をクリックします。
5. Edit ページで、タイプが End Entityであることを確認し、以下を更新します。
Available Key Algorithms で、楕円曲線キーのみを許可するには、ECDSA を選択します。
Available ECDSA curves(利用可能な ECDSA 曲線)として、P-256 / prime256v1 / secp256r1 を選択します。
Signature Algorithm で、Inherit from Issuing CA が選択されていることを確認します。
Validity or end date of the certificate(証明書の有効期間または終了日)には、1y(年) を指定します。
Expiration Restrictions(有効期限の制限): 週末近くに証明書の有効期限が切れることを避けるために、証明書の有効期限が火曜日、水曜日、および木曜日にのみ有効になるようにします。

Use にチェックを入れて、Tuesday, Wednesday, Thursday にチェックなしです。

Tuesday, Wednesday, Thursday にチェックなし

6. Permissions で、証明書の要求者が構成しているプロファイルの特定のデフォルト値を上書きできるようにすることができます。
これにより、有効性や拡張機能などのプロファイルのデフォルト値を上書きし、独自の値を設定できます。
デフォルトでは、EJBCA はオーバーライドを許可しないため、発行される証明書はこのプロファイルで構成された内容によって定義されます。

特に指示が無いため、そのままとします。

Permissions

7. X.509v3 extensions(X.509v3 拡張機能)セクションでは、証明書に追加される拡張機能を定義できます。
・この制約は、これが CA 証明書ではなくエンド エンティティ証明書であることを定義しており、これをオプションにするため、Basic Constraints(基本制約)をクリアします。
Key Usage で、Digital Signature(デジタル署名)と Key encipherment(キーの暗号化)が選択されていることを確認します。
Extended Key Usage(拡張キーの使用法) で、Server Authentication(サーバー認証) が選択されていることを確認します。
Extended key usages(拡張キー使用法)では、証明書とキー ペアの使用方法を定義します。
デフォルトでは使用できないキーの使用法が必要な場合は、EJBCA システム設定で拡張キーの使用法を追加できます。
Extended Key Usage(拡張キーの使用法)」を参照してください。

「デフォルトでは使用できないキーの使用法が必要な場合」という表現は、EJBCAの初期設定では対応していない特定のキーの使用法が必要となる状況を指しています。

言い換えると、「EJBCAの初期設定では対応していないが、特定の目的のために必要となるキーの使用法がある場合」という意味になります。このような場合、EJBCAのシステム設定で新たにそのキーの使用法を追加することが可能です。これにより、その特定の目的(例えばコード署名や電子メール保護など)に対応する証明書を作成することができます。

拡張キー使用法は、管理 Web の System Configuration ページの Extended Key Usages タブで追加および削除できます。

Basic Constraints等

X.509v3 extensions - Names は、Subject Alternative Name(サブジェクトの代替名)が選択されていることを確認し、CA には代替名がないため、Issuer Alternative Name(発行者の代替名)拡張機能をクリアします。
X.509v3 extensions - Validation data(検証データ):
CRL Distribution Points(CRL 配布ポイント)を有効にして、後で検証できるようにします。
・CA で事前設定された値を使用するには、Use CA defined CRL Distribution Point(CA 定義の CRL 配布ポイントを使用する)を有効にします。
・CA 設定で構成された場所を使用するには、Authority Information Access(機関情報アクセス)を有効にします。
Use CA defined OCSP locator(OCSP サービスが利用可能な場所)に対して Use CA defined OCSP locator(CA 定義の OCSP ロケーターを使用する)を有効にします。
Use CA defined CA issuer(発行元 CA 証明書の取得元)として、Use CA defined CA issuer(CA 定義の CA 発行者を使用する)を有効にします。
8. Other Data で、以下を更新します。
LDAP DN order をクリアして、DN 属性の LDAP 順序を無効にし、代わりに標準の X.509 順序を使用します。
Available CAs で、サブ CA MyPKISubCA-G1 を選択します。

Available CAs等

9. Save をクリックして証明書プロファイルを保存します。

【 Basic Constraints(基本制約) 】

「Basic Constraints」は、証明書がエンドエンティティ(最終ユーザー)の証明書であるか、それとも認証局(CA)の証明書であるかを定義します。

ここで作成している証明書はエンドエンティティの証明書であり、CA の証明書ではないため、「Basic Constraints」をクリアします。

また、「これをオプションにするため」という部分は、この制約をオプションとして設定したいという意図を示しています。

つまり、この制約は必須ではなく、必要に応じて適用できるようにします。

【 エンドエンティティ証明書と認証局(CA)証明書 】

エンドエンティティ証明書と認証局(CA)証明書は、それぞれ異なる目的と役割を持っています。

エンドエンティティ証明書は、通常、個々のユーザーやデバイスに発行されます。

これらの証明書は、その所有者(ユーザーやデバイス)が誰であるかを確認するために使用されます。

例えば、ウェブサイトの SSL/TLS 証明書はエンドエンティティ証明書の一種で、ブラウザがサーバーと安全に通信するために使用されます。

一方、認証局(CA)証明書は、他の証明書を発行および署名するための証明書です。CA 証明書は、信頼された第三者(認証局)によって発行され、その認証局が発行した他の証明書(エンドエンティティ証明書を含む)の信頼性を保証します。


新しく作成された TLS Server Profile が証明書プロファイルのリストに表示されます。

TLS Server Profileが証明書プロファイルのリストに表示


ステップ 2 - エンド エンティティ プロファイルの作成

次に、エンド エンティティ プロファイルを作成ます。これにより、EJBCA がどのような証明書保有者の情報を記録し、サブジェクト情報として追加するかを定義できます。


エンド エンティティは、デバイス、個人、サーバーなどの PKI のユーザーです。 これは、PKI の証明書の階層においてエンドポイントであり、 独自の証明書を発行する権限を持たないため、エンド エンティティと呼ばれます。
エンド エンティティ プロファイルは、証明書に追加するサブジェクト情報 (サブジェクト DN やサブジェクトの代替名など) を定義するために使用されます。 証明書の発行には、常に証明書プロファイルと一緒に使用されます。 たとえば、証明書リクエストに特定の値のみを含めることを許可し、それ以外の場合は拒否するように設定したり、 一部のフィールドはリクエスト側が自由に選択したりできます。
エンド エンティティ プロファイルで指定された属性値は、オプションのデフォルト値としてリクエストの検証に使用されるか、 証明書リクエストで提供される値と組み合わせることができます。 たとえば、国属性を変更不可かつ必須にし、国コードとして SE を指定した場合、 証明書はスウェーデンのエンドエンティティにのみ発行される必要があることを意味します。
さらに、エンド エンティティ プロファイルは、発行 CA が証明書とともにキー ペアを生成するか、 エンド エンティティによって作成された証明書署名要求 (CSR) に基づいて発行を許可するかを制御します。

エンド エンティティ プロファイルを作成するには、次の手順に従います。:


1. EJBCA の RA Functions で、End Entity Profiles をクリックします。
2. Add Profile フィールドに、新しいプロファイルの名前 (この例では TLS Server Profile) を追加し、Add profile をクリックします。

「Add Profile フィールド」は、原文のままで、実際には、Add End Entity Profile フィールド です。

Add End Entity Profile フィールド

3. 新しく作成した TLS Server Profile を選択し、Edit End Entity Profile をクリックしてプロファイルを更新します。

Edit End Entity Profile

4. プロファイルを編集し、以下を更新します。
・電子メール アドレスを保存しないようにするには、End Entity E-mail をクリアします。
Subject DN Attributes(サブジェクト DN 属性)で、次を指定します。
Subject DN Attributes で、[O, Organization(組織)] フィールドと [C, Country (ISO 3166)(国)] フィールドを追加します。

各々選択して Add ボタンをクリックです。

CN, Common Name(共通名)については、新しい要求が行われたときに値を使用できるように、Required(必須)および Modifiable(変更可能)が選択されていることを確認します。必要に応じて、正規表現を使用して検証を追加して、許可される値を制限できます。

【 CN, Common Name 】

CSRの Common Name は、CSRを生成する際に入力する項目の一つで、ブラウザでサーバにアクセスする際に入力するURL(FQDNまたはIPアドレス)に相当します。具体的には、以下のような形式になります:

URL: https://jp.example.com/contact/inquiry_form.html → Common Name: jp.example.com

URL: https://210.172.xxx.169/index.html → Common Name: 210.172.xxx.169

SSL暗号化通信の際には、コモンネームがサイトのURLと一致しているかを確認するため、異なるサブドメインなどでアクセスした場合にはエラーになります。また、複数のサイトでSSLを利用する場合は、サイトごとに証明書が必要となります。ワイルドカード証明書(*.xxx.xxx.xx)では、同一ドメイン名の複数コモンネームに対応が可能です。

O, Organization(組織)で、Required(必須)が選択されていることを確認し、Modifiable(変更可能)をクリアして、組織として使用する「Keyfactor Community」と入力します。
C, Country(国)については、Required(必須)が選択されていることを確認し、Modifiable(変更可能)をクリアして、国としてスウェーデンを使用するために「SE」と入力します。

CN, Common Name等

Other Subject Attributes(その他のサブジェクト属性)で、サブジェクト代替名 (SAN) のオプションを指定できます。一部のブラウザではこのフィールドが必要なので、サーバー証明書に実装する必要があります。
Subject Alternative Name(サブジェクトの代替名)リストで DNS Name を選択し、Add をクリックします。表示された DNS Name フィールドで、Use entity CN field(エンティティ CN フィールドを使用する) を選択して、共通名フィールドと同じ DNS 名を追加します。
・証明書内で複数の DNS 名を許可するには、オプションの DNS Nameを追加します。DNS Name を選択し、Add をクリックします。表示された DNS Name フィールドでは、デフォルトの Modifiable オプションが選択されたままにしておきます。これを繰り返して、オプションの DNS 名をさらに追加します。

Subject Alternative Name等

Main Certificate Data(メイン証明書データ)を使用すると、デフォルトの証明書プロファイルおよび CA と一緒に使用するプロファイルをマッピングできます。
Default Certificate Profile(デフォルトの証明書プロファイル)で、[ステップ 1 - 証明書プロファイルの作成](#anchor4) で作成した TLS Server Profile を選択します。

Available Certificate Profiles も CTRL キーを押しながら TLS Server Profile を選択しておく必要があります。

Available Certificate Profiles

Default CAs は、MyPKISubCA-G1 を選択して、このプロファイルをサブ CA (EJBCA での PKI 階層の作成で作成) のみが使用できるように制限します。

実際の表記は、「Default CA」です。

Default CA

Default Token オプションを指定して、証明書に対してキー ペアの生成を実装する方法を定義します。
User Generated(ユーザー生成)と PEM file 形式での CA 側のキー ペアの生成 を選択して、CA が証明書と一緒にキー ペアを生成できるようにします。
User Generated(ユーザー生成)とは、要求者が独自のキー ペアを生成し、ユーザーが証明書要求の証明書署名要求 (CSR) を作成して EJBCA に提供することを意味します。他のファイル オプションを使用すると、CA は秘密キーと証明書を生成し、選択した形式で単一のファイルとして要求者に返すことができます。

User Generated

5. Save をクリックして、エンド エンティティ プロファイルを保存します。

エンド エンティティ プロファイル


ステップ 3 - サーバー証明書の発行

サーバー証明書を発行するには、EJBCA RA Web インターフェイスを使用して新しいリクエストを作成し、新しいプロファイルを使用して登録します。


1. EJBCA で、RA Web をクリックして EJBCA RA UI にアクセスします。

RA WebからEJBCA RA UI にアクセス

2. Enroll(登録)メニューから Make New Request を選択します。

EnrollからMake New Request

3. Certificate Type(証明書の種類)で、TLS Server Profile ([ステップ 1 - 証明書プロファイルの作成](#anchor4) で作成したもの) を選択します。

Certificate subtype に言及が無いため、この記事では、TLS Server Profile (default) を選択します。

4. Key-pair generation(キー ペアの生成)で、Provided by user(ユーザーによる提供)を選択して、証明書署名要求 (CSR) をアップロードできるようにします。

Certificate Type

5. CSR を作成するには、ターミナルを開いて次の手順に従います。
a. 任意のテキスト エディタを使用して、リクエストに追加する次の情報を含む単純な構成ファイル (この例では tls_cert_req.cnf という名前) を作成します。
[ req ]
default_md = sha256
prompt = no
distinguished_name = dn

[ dn ]
CN = test.my.pki
O = Keyfactor Community
C = SE
b. 証明書プロファイルで定義された prime256v1 曲線を使用して、OpenSSL で楕円曲線キー(※原文:elliptic cure key。curve のタイポ?)を生成します。
openssl ecparam -genkey -name prime256v1 -out tls_server.key
c. OpenSSL req コマンドを使用してキーと設定を結合し、CSR と証明書リクエストを作成します。
openssl req -new -key tls_server.key -config tls_cert_req.cnf
d. 次のような出力を受け取るはずです。
-----BEGIN CERTIFICATE REQUEST-----
fyGCAkd/ToIBPV8pAQBCDVNFQ1ZDQVBLMDAwMDF/SYIBFQYKBAB/AAcCAgIBAoGC
AQDJuBLa1iFXD7WWK6614RvtmiZpgFXiTWkznp5MfusJuNqBuz46zeFAIJcerEtK
xcHtbOppA5U2FwOtqit0yhkg2XLTEf9zh5ewchSGWujG9yY77BPXfLg3a3iwVyBW
sED4z4L71hfvByTtkBpz90BFjwMUsiSzkuRwM/2PeThJNm5yDZVjLNFfN7Vdibi6
7PRh77oQkofk/FvMNVa60u6RsT1urJdM7+5mCvGOs0KoWzFMCdm3rZrIIvWmQBSx
MPRL42AVDgY/G7df27YMHJZ
-----END CERTIFICATE REQUEST-----
6. 証明書リクエストをコピーし、EJBCA の Make Request ページに戻ります。
7. コピーした CSR を貼り付け、Upload CSR をクリックして EJBCA にアップロードします。

>Upload CSR

8. Provide request info(要求情報の提供)セクションで、EJBCA が CSR から共通名を取得したこと、およびプロファイルに追加されたオプションの DNS 名フィールドが表示されていることを確認できます。
9. Username に test.my.pki を追加し、共通名と同じユーザー名でユーザーを登録します。ユーザー名はデータベースに登録される名前で、多くの場合共通名と同じです。

Usernameに test.my.pki を追加

10. Download PEM full chain(PEM フル チェーンのダウンロード)をクリックして、生成された証明書を PEM チェーン内の CA 証明書とともにダウンロードします。

Download PEM full chain


ダウンロードされた test.my.pki.pem ファイルには、証明書 test.my.pki と、ルート CA およびサブ CA の CA 証明書が含まれています。

ダウンロードされた test.my.pki.pem ファイル


Apache で使ってみる

ここからは、チュートリアルに無いオリジナルの実施内容です。
作った証明書は、サーバー証明書のため、Apache に読み込ませて、実際に使用してみます。

# apt -y update
# apt -y install apache2
# a2enmod ssl
# a2ensite default-ssl
# cp test.my.pki.pem /etc/ssl/certs/test.my.pki.pem
# cp tls_server.key /etc/ssl/private/tls_server.key
# chown root: /etc/ssl/certs/test.my.pki.pem /etc/ssl/private/tls_server.key
# chmod 400 /etc/ssl/private/tls_server.key
# vi /etc/apache2/sites-available/default-ssl.conf
    SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
を以下に変更
    SSLCertificateFile      /etc/ssl/certs/test.my.pki.pem
    SSLCertificateKeyFile /etc/ssl/private/tls_server.key
# systemctl restart apache2

test.my.pki を hosts に追加して、https:/test.my.pki/ にアクセスしてみます。

test.my.pkiにアクセス1


test.my.pkiにアクセス2


使えました!


証明書を表示してみます。

証明書を表示


証明書情報


見覚えのある情報が入っています!


・・・


「で、その証明書、凄いの?」っていうつっこみは無しです。


以上!

loading...