テスト用の証明書の有効期限を更新するには

Silverlight の XAP や ClickOnce で使用する自己署名用の証明書の有効期限が切れた場合に、makecert.exeを使って新しい証明書を作成して使用すると証明書の不一致が発生します。こうなると、以前のアプリケーションをアンインストールしてから新しいアプリケーションをインストールする必要があります。この問題を避けるには、証明書の更新要求を行ってから、証明書を証明機関(CA)から発行してもらう必要があります。一般的に商用のコード署名用の証明書の有効期間は、1年か、長いものでも3年になります。テスト用の自己署名用の証明書の場合は、証明書の更新をmakecer.exeはサポートしていません。この問題に対する記事としては、以下のものがあります。

どちらの記事も Visual Studio 2005 のものになりますし、作成したプログラムの実行には VC 2005のランタイムが必要になります。VC 2005 のランタイムをインストールしていない環境でそうしようかと考えて、証明書の作成を C# で行うサンプルがないかと探していたら、以下の記事がありました。

この記事に添付されている Certificate.cs と 先に提示した記事を参考にしながら、RenewCert というプログラムを作成しました。このプログラムは、コマンドラインで使用するもので、以下のような使い方をします。

  • RenewCert.exe 既存の証明書.pfx 新しい証明書.pfx CN="発行機関" "パスワード" 有効年数
    このコマンドで今日から指定した有効年数が期限の証明書を作成します。
  • RenewCert.exe -c 新しい証明書.pfx CN="発行機関" "パスワード" 有効年数
    makecert.exeと同じように新しい証明書を作成します。

makecert.exe で作成した証明書との違いは、拡張プロパティのAuthority Key Identifier(機関キー識別子)が無いことです。証明書の発行日は、コマンドを実行した日になっており、指定した年数が有効期間になり、更新の場合は元の証明書データを使用しますので public keyは同じものになります。添付したプログラムは、Visual Studio 2010で作成して、Windows 7 と Windiows Server 2008 R2 で動作確認しています。

追記:書き忘れていましたが、鍵長は2048に設定してありますので、1024で試される方はコードを修正して下さい。

RenewCert.zip