.NET TIPS プログラムでデジタル証明書をインストールするには?デジタルアドバンテージ 一色 政彦2009/02/26 |
|
セットアップ・プログラムやClickOnce配置などを中心に、セキュリティ管理の手段としてデジタル証明書(Digital Certificate)を活用する場面が増えている。Windows OSにはデジタル証明書を一元管理する機能が搭載されており、これを操作/閲覧するためのツールとして「証明書MMCスナップイン」(certmgr.msc)が提供されている。
このツールは、通常「C:\Windows\System32\certmgr.msc」にインストールされており、起動すると次の画面のような「証明書MMCスナップイン」が表示される。素早く起動するには、[Windows]+[R]キーで[ファイル名を指定して実行]ダイアログを表示し、「certmgr.msc」と入力して[Enter]キーを押せばよい。
証明書MMCスナップイン(certmgr.msc) |
このツールを用いて手動でデジタル証明書をインストールするには、証明書MMCスナップイン(の左側のツリー)の適切なフォルダを右クリックして、表示されるコンテキスト・メニューから[すべてのタスク]−[インポート]をクリックする。
これにより、次の画面のような[証明書のインポート ウィザード]が表示されるので、ウィザードの指示に従って進めば、デジタル証明書をインストールできる。
[証明書のインポート ウィザード] |
しかし、このような作業をエンド・ユーザーに実施してもらうのは、現実的にはなかなか難しい。そこで本稿では、C#やVB(Visual Basic)のプログラムでこれと同様の処理を実現する方法を紹介する。
なお、本稿で使用するクラスは.NET Framework 2.0以降で導入されたものなので、.NET Framework 1.xでは使えない(ちなみに.NET Framework 1.xで同様の処理を実現するにはWin32 APIのCertAddCTLContextToStore関数などを利用する必要がある)。
C#やVBのプログラムからデジタル証明書をインポートする方法
C#やVBのプログラムからデジタル証明書をインポートするには、(X.509形式の)デジタル証明書を表すX509Certificate2クラス(System.Security.Cryptography.X509Certificates名前空間)のオブジェクトと、ローカル・コンピュータ上の証明書ストア(後述)を表すX509Storeクラス(System.Security.Cryptography.X509Certificates名前空間)のオブジェクトを用いる(いずれのクラスともSystem.dllアセンブリに含まれているので、アセンブリ参照の追加は不要)。
まずX509Certificate2オブジェクトを取得するには、パラメータにデジタル証明書ファイル(.cerファイル)へのパスを指定して、X509Certificate2クラスのコンストラクタを呼び出せばよい。次のコードはその例だ。
|
||
X509Certificate2オブジェクトの取得(上:C#、下:VB) |
次にX509Storeオブジェクトを取得するには、第1パラメータにStoreName列挙体(System.Security.Cryptography.X509Certificates名前空間)の値を、第2パラメータにStoreLocation列挙体(System.Security.Cryptography.X509Certificates名前空間)の値を指定して、X509Storeクラスのコンストラクタを呼び出せばよい。
StoreName列挙体は、証明書ストア、つまりデジタル証明書の保存場所を表す。この保存場所は、証明書MMCスナップインの各フォルダと一致している。StoreName列挙体には次の8個の証明書ストアが用意されている。
- My:個人
- Root:信頼されたルート証明機関
- CertificateAuthority:中間証明機関
- AddressBook:ほかの人
- TrustedPublisher:信頼された発行元
- Disallowed:信頼されていない証明書
- AuthRoot:サードパーティ・ルート証明機関
- TrustedPeople:信頼されたユーザー
(筆者の経験として)証明書ストアとしてよく使われるのは、「信頼されたルート証明機関(StoreName.Root)」と「信頼された発行元(StoreName.TrustedPublisher)」である。
一方、StoreLocation列挙体は、証明書ストアの種類を示す。具体的には次の2つがある。
- CurrentUser:現在のユーザーに割り当てられる証明書ストア
- LocalMachine:ローカル・マシンに割り当てられた証明書ストア
全ユーザー共通でデジタル証明書を設定したい場合には「StoreLocation.LocalMachine」を指定する。
次のコードは、「ローカル・マシン」に割り当てられた「信頼された発行元」の証明書ストア(X509Storeオブジェクト)を示す取得する例だ。
|
||
X509Certificate2オブジェクトの取得(上:C#、下:VB) |
以上のX509Certificate2オブジェクトとX509Storeオブジェクトを使って証明書を登録するコンソール・アプリケーションのコードは、例えば次のようになる。
|
||
X509Certificate2オブジェクトの取得(上:C#、下:VB) |
太字部分(いずれもX509Storeオブジェクトのメソッド呼び出し)では、証明書ストアを開いて(Openメソッド)、証明書ストアにデジタル証明書を追加して(Addメソッド)、証明書ストアを閉じている(Closeメソッド)。
Openメソッドの第1パラメータにはOpenFlags列挙体(System.Security.Cryptography.X509Certificates名前空間)の値を指定する。OpenFlags列挙体には以下の値がある。
- ReadWrite:読み書き可能で開く
- ReadOnly:読み取り専用で開く
- MaxAllowed:許可された最も高いレベルのアクセスで開く
- OpenExistingOnly:既存の証明書ストアだけを開く(証明ストアが存在しない場合は新しい証明書ストアを作成しない)
- IncludeArchived:証明書ストアを開き、アーカイブされたデジタル証明書を格納する
上記のコードでは「OpenFlags.ReadOnly」となっているが、証明書をインストールする場合には通常これを指定する。
また、Addメソッドの第1パラメータには、デジタル証明書を示すX509Certificate2オブジェクトを指定する。
Addメソッドの代わりに、Removeメソッドを呼び出せば、証明書ストアからデジタル証明書を削除できる。
以上のプログラムを実行すると、証明書MMCスナップインの「信頼された発行元」フォルダに追加したデジタル証明書が表示される。
なおデジタル証明書自体は、(テスト用だが)ClickOnceの機能などで入手できる。また、「TIPS:ClickOnceのデジタル証明書を更新するには?」ではデジタル証明書の期限を延期するプログラム(RenewCert.exe)の作り方を紹介している。
カテゴリ:クラス・ライブラリ 処理対象:セキュリティ 使用ライブラリ:X509Certificate2クラス(System.Security.Cryptography.X509Certificates名前空間) 使用ライブラリ:X509Storeクラス(System.Security.Cryptography.X509Certificates名前空間) 使用ライブラリ:StoreName列挙体(System.Security.Cryptography.X509Certificates名前空間) 使用ライブラリ:StoreLocation列挙体(System.Security.Cryptography.X509Certificates名前空間) 使用ライブラリ:OpenFlags列挙体(System.Security.Cryptography.X509Certificates名前空間) 関連TIPS:ClickOnceのデジタル証明書を更新するには? |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|