|
.NET TIPS ClickOnceのデジタル証明書を更新するには?[VS 2005のみ、2.0のみ、C#、VB]デジタルアドバンテージ 一色 政彦2007/06/28 2007/11/10、2007/12/20 更新 |
![]() |
|
|
|
ClickOnce機能で配布されるアプリケーション(以降、ClickOnceアプリ)は、「コードサイニング証明書(Authenticode対応Digital ID)」(以下、デジタル証明書)によって署名されなければならない。この署名作業はVisual Studio 2005(以降、VS 2005)が自動的に行ってくれるため、あまり意識していない開発者も少なくないだろう。
このVS 2005による自動署名のほかにも、makecert.exeを使って手動で発行したデジタル証明書を使う方法や、第三者機関のVeriSignなどが発行したデジタル証明書を利用する方法などがある(詳しくは「連載:ClickOnceの真実 第7回」の「■セキュリティの設定方法1 ― デジタル証明書による署名方法」を参照されたい)。
しかし、いずれの方法で署名したとしても、そこで使われるデジタル証明書の有効期間は基本的に12カ月である。そのため、1年が過ぎてアプリケーションをバージョン・アップしようとすると、この有効期限に引っかかり、ClickOnce発行する際にエラーとなってしまうのだ。
次の画面は実際に有効期限が切れたデジタル証明書を使って発行しようとしたときの[エラー一覧]の表示である。
![]() |
| 有効期限が切れたデジタル証明書で発行しようとしたときのエラー |
| 「The signer's certificate is not valid for signing.」のメッセージが、署名に使おうとしているデジタル証明書が(有効期限が切れているなどの理由で)不正であることを通知している。 |
このエラーを回避するには、デジタル証明書を更新して有効期限を延ばすしかない(※VS 2005でデジタル証明書を新たに作り直すと、「デジタル証明書が一致しない」というエラーになり、クライアントPCからClickOnceアプリをアップデートできないので注意すること。なお、読者からの問い合わせによると、VeriSignなどが発行した証明書を更新しても同様のエラーが発生することがある。筆者はVeriSignの証明書で動作を検証したわけでない)。
だが、VS 2005が自動生成したデジタル証明書(=「<プロジェクト名>_TemporaryKey.pfx」ファイル)の場合は、どうやって有効期限を延期すればよいのだろうか? これについて本稿で説明する。
VS 2005が自動生成したデジタル証明書を更新するには?
実はVS 2005には証明書を作成する機能はあるが、それを更新する機能は備えていない(※次期Visual Studio 2008(コード名:Orcas)では更新機能に対応するらしい)。そのため、VS 2005で自動署名している場合には、ClickOnceアプリをバージョン・アップ/更新できない問題には簡単に対応できない(※有効期限は署名時にチェックされるので、有効期限内に署名したClickOnceアプリであれば、期限失効後もそのまま利用できる。ここで問題となるのは新たなバージョンを開発・提供する場合である)。これに対し米Microsoftは、以下のKB(ナレッジ・ベース)を提供している。
これを読むと、1つの対応策は「すべてのクライアントでいったん既存のClickOnceアプリをアンインストールして、新しいデジタル証明書で署名したClickOnceアプリを再インストールすること」で、もう1つは「RenewCert.exeというコマンドライン・ツールを作り、それを使ってデジタル証明書を更新すること」と記述されている。前者の方法はクライアント数が増えてくると現実的な解決策ではなくなる。そこで本稿では、後者の方法を用いてデジタル証明書を更新する手順を紹介する。
取りあえず最初にRenewCert.exeを作成する必要がある。このツールは、Visual C ++を使用し、Win32コンソール・アプリケーションとして作成する。
●RenewCert.exeの作成手順
RenewCert.exeを作成するには、まずVS 2005(※Visual C++ 2005 Express EditionでもOK)のIDEを立ち上げ、メニュー・バーから[ファイル]−[新規作成]−[プロジェクト]を選択して[新しいプロジェクト]ダイアログを表示し、そこで「Visual C++」による「Win32 コンソール アプリケーション」のプロジェクトを「RenewCert」という名前で作成する。
次の画面は実際に[新しいプロジェクト]ダイアログで指定する内容である。
![]() |
||||||||||||
| 「RenewCert」プロジェクトの新規作成 | ||||||||||||
| [新しいプロジェクト]ダイアログで「RenewCert」プロジェクトを作成しているところ。[場所]は任意のディレクトリを入力してよい。 | ||||||||||||
|
上記画面の手順を実行すると、次のような[Win32 アプリケーション ウィザード]ダイアログが表示されるので[完了]ボタンをクリックしてダイアログを閉じる。
![]() |
| [Win32 アプリケーション ウィザード]ダイアログにおけるプロジェクト設定 |
| 何も設定せずに[完了]ボタンをクリックしてウィザードを終了する。 |
以上の作業により、「RenewCert」プロジェクトが新規に作成される。
次に[ソリューション エクスプローラ]で(自動生成されている)「RenewCert.cpp」項目をダブルクリックしてRenewCert.cppファイルを開き、既存のコードを以下のコードに書き換える(※単純にコピー&ペーストでOK)。
なお下記のコードは、先ほどのMicorosoft サポートオンラインで示されているものであり、本稿でオリジナルに作成したものではない(※ただし、日本語の説明を追加したり、不要なコード部分はカットしたりするなど若干の改変を行っている)。
|
|
| 置き換えるコード内容(RenewCert.cppファイル) | |
| コード内容の説明は本稿の趣旨ではないため割愛する。 |
さらにstdafx.hファイルを開き、既存のコードを以下のコードに書き換える。
|
|
| 置き換えるコード内容(stdafx.hファイル) | |
| コード内容の説明は本稿の趣旨ではないため割愛する。 |
以上でコーディングは終了だ。
上記コードでは、(wincrypt.hヘッダ・ファイルをインクルードして)Crypt32.dllファイルの関数や構造体などを利用するので、次の画面のようにして、プロジェクトのプロパティで「Crypt32.lib」ライブラリをリンカの入力に指定する必要がある。
あとはソリューションをビルドすればRenewCert.exeファイルが生成される。
●RenewCert.exeの利用
RenewCert.exeの使い方は簡単だ。コマンドラインでの構文は以下のようになっている。
RenewCert.exe <元のデジタル証明書のファイル・パス名>.pfx <更新後のデジタル証明書のファイル・パス名>.pfx "CN=<発行者名>" <パスワード> |
VS 2005で自動生成したデジタル証明書における発行者名は、ClickOnceの発行を行ったユーザーの名前(例えば「D-ADVANTAGE\masa-i」)になっているはずだ。RenewCert.exeでもこの名前を指定すればよい。発行者の名前を変更したいのであれば、任意の名前を指定してもOKだ。
例えば筆者の環境では、以下のコマンドラインでデジタル証明書を更新できた(※パスワードは指定していない)。
renewcert C:\WindowsApplication1_TemporaryKey.pfx C:\WindowsApplication1_TemporaryKey_New.pfx "CN=D-ADVANTAGE\masa-i" |
これを実行すると、C:\にあるWindowsApplication1_TemporaryKey.pfxファイルが読み込まれ、新しくWindowsApplication1_TemporaryKey_New.pfxファイルが生成された(※元のファイルは書き換えられない)。
最後に実際にVS 2005を使って、この新しいデジタル証明書(.pfxファイル)を利用するようにすれば、冒頭で示したようなエラーが表示されずにClickOnceの発行が成功するはずである。VS 2005でデジタル証明書を指定する方法は、先ほども示した「連載:ClickOnceの真実 第7回」の「■セキュリティの設定方法1 ― デジタル証明書による署名方法」を参考にしてほしい。
RenewCert.exeでデジタル証明書を更新すると、有効期限は5年延長されるので、当分の間はデジタル証明書の更新で作業が発生することはないだろう。![]()
| 利用可能バージョン:.NET Framework 2.0のみ カテゴリ:Windowsフォーム 処理対象:ClickOnce |
|
||||||||||||||||||||||||||||
| 「.NET TIPS」 |
| 更新履歴 | |||||||
|
ホワイトペーパー(TechTargetジャパン)
- LocalConnection APIと動的なスタイリング (2010/2/9)
Webページ上の複数のSilverlightアプリ間でメッセージ通信をする方法とは? コントロールの見た目を動的に設定する方法とは? - ASP.NET MVC 2:モデルの検証 (2010/2/8)
ASP.NET MVC 2で導入される入力検証機能を使った実装を紹介。シンプルな属性の追加によるエレガントな実装が可能となっている - ASP.NETによる3階層Webアプリ「ITブック」構築 (2010/2/5)
ちょっとした改造で、あなたのWebアプリは劇的に使いやすく、かっこよくなる。まずは元となるWebアプリを標準的手法で構築 - .NET TIPS - .NET開発のテクニックとヒント集 - (2010/2/4)
− カスタムMVCビューエンジンを利用するには?(活用編)
− フォーム全体へのドッキングでつまみを表示するには?
− リストボックスでTextBlockの文字列を折り返すには?
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |











