「暗号の2010年問題」によりコードサイニング証明書がRSA2,048bitで発行されるようになった。RSA2,048bitコードサイニング証明書を使って署名すると一部のPCではファイルのプロパティで「署名にある証明書を検証できません。」と表示された。


この問題は該当のPCで「ルート証明書の更新」を行うことで解消する。Windows PKI - その2 - ルート証明書更新プログラムとは? Windows ルート証明書プログラムのメンバー


しかし対象のPCすべてで「ルート証明書の更新」を行うことができないこともあり、そのような場合にも「署名にある証明書を検証できません。」と表示されないようにしたい。
VeriSignのAuthenticode対応Digital IDの場合、signtool.exe の /ac オプションで下記の中間証明書を対象ファイルに埋め込むことで解決する。 シリアル番号 25 0c e8 e0 30 61 2e 9f 2b 89 f7 05 4d 7c f8 fd
/ac <file>  Add an additional certificate, from , to the signature block.

この証明書はあるPCでmmcの証明書スナップインの中間証明機関の証明書からDER encoded binary X.509 (CER)形式でエクスポートしたものである。同じ証明書がクロスルート設定用証明書 (製品共通)にてBase 64 encoded X.509 (CER)形式で配布されている。DER encoded binary X.509 (CER)形式とBase 64 encoded X.509 (CER)形式のどちらであっても問題なく署名できることを確認した。
この中間証明書を対象ファイルに埋め込んで配布してよいか日本ベリサインのサポートに問い合わせた結果、問題なしであった。VeriSignの証明書 mycredentials.spc にはクロスルート設定用証明書が含まれている。


spc+pvxをpvk2pfx.exeでpfxに変換する過程でクロスルート設定用証明書が欠落するように思われる。下の図はpfxをインポート後p7bにエクスポートしたもの。



「ルート証明書の更新」を行っていないPCで、中間証明書を埋め込んでいないtest2と中間証明書を埋め込んでいるtest3のプロパティを表示している。


「ルート証明書の更新」を行っているPCで、中間証明書を埋め込んでいないtest2と中間証明書を埋め込んでいるtest3のプロパティを表示している。

RSA2,048bitの証明書ではクロスルートといって、2,048bitのルート証明書から繋がる道筋と、1,024bitのルート証明書から繋がる道筋の二つがある。
RSA2,048bitの証明書で単純に署名をすると2,048bitのルート証明書から繋がる道筋がファイルに記録される。この状態では「ルート証明書の更新」を行ったPCでのみ「このデジタル署名は問題ありません。」となる。「ルート証明書の更新」を行っていないPCでは1,024bitのルート証明書から繋がる道筋の中間証明書がPCにインストールされていないため「署名にある証明書を検証できません。」となる。
/ac オプションで、1,024bitのルート証明書から繋がる道筋の中間証明書をファイルに埋め込むと「ルート証明書の更新」を行っていないPCでも「このデジタル署名は問題ありません。」となる。






「ルート証明書の更新」でインストールされるルート証明書


ベリサイン サーバID(SSLサーバ証明書)における公開鍵長などの仕様変更について(続報)
ベリサインサーバID等における2010年の仕様変更(公開鍵長など)について
SSLサーバ証明書における中間証明書の変更について


この問題を解決する別の方法
1. 日本ベリサインFAQ 署名ファイルの実行時に一部のPC環境で警告が表示されます 署名するPCの2,048bitのルート証明書を無効にする。
2. 署名するPCの2,048bitのルート証明書を削除する。 1 2 3

カーネル モードのコード署名用クロス証明書 がVeriSign Class 3 Public Primary Certification Authority - G5に更新されている(最終更新日: 2011 年 9 月 15 日)。

もどる