証明書を作成するときのオプション (OID など)

以前に証明書を作成するというエントリーを書きましたが、
今回は Makecert.exe のオプションである -eku および -cy について書きます。
いずれも、証明書の用途を明示して制限するために使います。

 

-eku: オブジェクト識別子 (OID)

-eku でオブジェクト識別子 (OID) を指定します。カンマ区切りで複数指定できます。
OID は OID Repository というページで確認できます。
例えば、1.3.6.1.5.5.7.3.3 は、コード署名に利用することを表します。

-eku を指定しない場合:

makecert-eku-no

「-eku 1.3.6.1.5.5.7.3.3」を指定した場合:

makecert-eku

 

-cy: 証明機関かどうか

証明機関の場合は authority を、エンド エンティティ (ソフトウェア発行元など) の場合には end を指定します。
「-cy authority」が指定された証明書でコード署名をしてアプリケーションを発行しても、署名は無効になるようです。

「-cy end」を指定した場合 ([基本制限] という項目が追加されます):

makecert-cy-end

 

というわけで、以前作成した方法に -eku と -cy を追加して、次のようなコマンドで証明書を作成できます。

■ 単一の証明書 (階層を作らない) の場合

makecert -n "CN=Abc Apps,O=Abc Company,C=JP" -a sha256 -b 01/01/2000 -e 01/01/2100 -eku 1.3.6.1.5.5.7.3.3 -cy end -r -sv abc-apps.pvk abc-apps.cer
pvk2pfx -pvk abc-apps.pvk -spc abc-apps.cer -pfx abc-apps.pfx -f -pi P$ssword1

■ 証明機関の下に証明書を作成する (階層を作る) 場合

makecert -n "CN=Abc Root,O=Abc Company,C=JP" -a sha256 -b 01/01/2000 -e 01/01/2100 -eku 1.3.6.1.5.5.7.3.3 -cy authority -r -sv abc-root.pvk abc-root.cer

makecert -n "CN=Abc Test,O=Abc Company,C=JP" -a sha256 -b 01/01/2000 -e 01/01/2100 -eku 1.3.6.1.5.5.7.3.3 -cy end -iv abc-root.pvk -ic abc-root.cer -sv abc-test.pvk abc-test.cer
pvk2pfx -pvk abc-test.pvk -spc abc-test.cer -pfx abc-test.pfx -f -pi P$ssword2

 

参照
Makecert.exe (証明書作成ツール)
OID Repository
Microsoft Windows SDKによるテスト用の自己認証局

広告
カテゴリー: ツール. タグ: , . 1 Comment »

証明書を作成する

// この投稿は Windows & Microsoft技術 基礎 Advent Calendar 2015 の 11 日目の記事です。

Windows で証明書を作成する方法を紹介します。
ただし、証明書は用途によっていろいろなものがあるので、
ここでは ClickOnce 発行に必要な開発用の証明書ということにします。
後続の既存の証明書を使って ClickOnce で発行するという記事で使います。

ツールとしては、.cer ファイルおよび .pvk ファイルを作成するには Makecert.exe を、
.pfx ファイルを作成するには Pvk2pfx.exe を使います。
また、証明書チェーンとなる .pfx ファイルを作成するには途中で .spc ファイルが必要で、Cert2spc.exe を使います。

Makecert.exe は、Windows 7 以前では .NET Framework ツールに含まれていたと思うのですが、
Windows 8 以降では Windows Driver Kit に入っており、C:\Program Files (x86)\Windows Kits フォルダーにあります。
Pvk2pfx.exe も Windows Driver Kit に入っています。
Windows 7 以前では pvkimprt.exe という別のツールを使っていました。

なお、Visual Studio 開発者コマンド プロンプトを使用すれば、
各ツールの絶対パスを気にすることなく makecert や pvk2pfx と打てます。

Visual Studio 開発者コマンド プロンプト

 

以下では、次の 2 パターンの証明書を作成する方法を示します。

  • 自己署名証明書 (ルート証明書)
    • 証明書ストアの [信頼されたルート証明機関] に配置します。
    • いわゆる「オレオレ証明書」です。
  • 証明書で署名された証明書
    • 証明書ストアの [個人]、[信頼された発行元]、[中間証明機関] などに配置します。

 

自己署名証明書 (ルート証明書) を作成する

とりあえず必須項目のみでルート証明書を作成するには、次のコマンドを実行します。

makecert -n "CN=abc" -r -sv abc-root.pvk abc-root.cer

表示されるダイアログで、秘密キーを保護するためのパスワード (Subject Key) を指定します。
ダイアログは 2 つありますが、すべて同じパスワードを入力します。

Subject Key

Subject Key

これで、.cer (証明書) と秘密キーがエクスポートされた .pvk が作成されました。

主なスイッチの説明は以下の通りです。

  • -r 自己署名であることを示します。
        -r も親の証明書も指定されない場合、"Root Agency" というルート証明機関の下に証明書が作成されます。
  • -n サブジェクト名を指定します。
        CN (Common Name) には区切り文字である "," を使用できません。
        例えば "Abc, Ltd." のような名前は指定できません。

Makecert.exe のスイッチはいろいろありますが、
自分は -a (署名アルゴリズム)、-b (有効期間の開始日)、-e (有効期間の終了日) を指定しています。

makecert -n "CN=Abc Root CA,O=Abc Company,C=JP" -a sha256 -b 01/01/2000 -e 01/01/2100 -r -sv abc-root.pvk abc-root.cer

-eku および -cy については、証明書を作成するときのオプション (OID など) に書きました。

.pfx を作成するには、次のコマンドを実行します。
-pi スイッチには、先ほど .pvk に設定した Subject Key を指定します。

pvk2pfx -pvk abc-root.pvk -spc abc-root.cer -pfx abc-root.pfx -f -pi P$ssword1

これで .pfx が作成されました。

作成された証明書

 

証明書で署名された証明書を作成する

Makecert.exe のスイッチで、-iv および -ic に親となる証明書を指定します。

makecert -n "CN=Abc Test,O=Abc Company,C=JP" -a sha256 -b 01/01/2000 -e 01/01/2100 -iv abc-root.pvk -ic abc-root.cer -sv abc-test.pvk abc-test.cer

新たに作成する証明書のパスワード (Subject Key) を入力するダイアログ (2 つ) のほか、
前項で指定した親の証明書のパスワード (Issuer Signature) を入力するダイアログも現れます。

Issuer Signature

.pfx を作成する方法は先ほどと同じです。

pvk2pfx -pvk abc-test.pvk -spc abc-test.cer -pfx abc-test.pfx -f -pi P$ssword2

この手順の代わりに、途中で .spc を作成するには次のコマンドを使います。

cert2spc abc-root.cer abc-test.cer abc-test.spc
pvk2pfx -pvk abc-test.pvk -spc abc-test.spc -pfx abc-test.pfx -f -pi P$ssword2

.spc は証明書チェーンとなっており、引数で指定した証明書が含まれます。
.spc から .pfx を作成するとチェーンも維持されるため、
この .pfx をインストールすればルート証明書も同時にインストールされます。

 

証明書マネージャー、証明書のインストール

証明書ストアの一覧を表示するには、Certmgr.exe (証明書マネージャー) を引数なしで実行します。
OS やブラウザーの [インターネット オプション] から開く方法もあります。

証明書マネージャー

 

Certmgr.exe にスイッチを指定すれば、コマンドで証明書をインストールできます (.pfx には使えない?)。

certmgr -add -c abc-root.cer -s root
certmgr -add -c abc-test.cer -s trustedpublisher

また、証明書ファイルをダブルクリックすれば、GUI で証明書をインストールできます。
ストアを指定しない場合、.pfx は [個人] に、.cer は [ほかの人] にインストールされます。
.pfx をインストールするには、パスワードの入力が必要です。

 

// 2016. 2. 5: .spc ファイルおよび Cert2spc.exe について追記。

次回: アプリケーションを ClickOnce で発行する
次々回: 既存の証明書を使って ClickOnce で発行する
次々々回: 証明書を作成するときのオプション (OID など)

バージョン情報
Windows 8.1, 10

参照
Makecert.exe (証明書作成ツール)
Certmgr.exe (証明書マネージャー ツール)
Pvk2Pfx
Cert2spc.exe (ソフトウェア発行元証明書テスト ツール)

方法 : 開発中に使用する一時的な証明書を作成する
デジタル署名に関して ~テスト用の証明書を作る~
X509Store.Name プロパティ (証明書ストアの名前)

カテゴリー: ツール. タグ: , . 3 Comments »