// この投稿は 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 と打てます。
以下では、次の 2 パターンの証明書を作成する方法を示します。
- 自己署名証明書 (ルート証明書)
- 証明書ストアの [信頼されたルート証明機関] に配置します。
- いわゆる「オレオレ証明書」です。
- 証明書で署名された証明書
- 証明書ストアの [個人]、[信頼された発行元]、[中間証明機関] などに配置します。
自己署名証明書 (ルート証明書) を作成する
とりあえず必須項目のみでルート証明書を作成するには、次のコマンドを実行します。
makecert -n "CN=abc" -r -sv abc-root.pvk abc-root.cer
表示されるダイアログで、秘密キーを保護するためのパスワード (Subject Key) を指定します。
ダイアログは 2 つありますが、すべて同じパスワードを入力します。
これで、.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) を入力するダイアログも現れます。
.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 プロパティ (証明書ストアの名前)