証明書を作成する

// この投稿は 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 »

コメント / トラックバック3件 to “証明書を作成する”

  1. 既存の証明書を使って ClickOnce で発行する | Do Design Space Says:

    […] 署名に使う証明書は、自己署名証明書でも、別の証明書で署名された証明書でもかまいません。 有効期限を指定する方法は、証明書を作成するという記事に書いた通りです。 […]

  2. アプリケーションを ClickOnce で発行する | Do Design Space Says:

    […] ClickOnce で発行する方法についてです。 前回: 証明書を作成する 次回: 既存の証明書を使って ClickOnce […]

  3. 証明書を作成するときのオプション (OID など) | Do Design Space Says:

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


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。