元の署名証明書の有効期限が切れた後(通常は発行後1〜3年)に、Authenticodeで署名されたファイルをWindowsで検証できるようにするには、ファイルに、Windowsで検証できる暗号で署名されたタイムスタンプも必要です。
多くの Authenticodeタイムスタンプサービス があり、バイナリに無料で署名します(オンラインで稼働している場合)。
タイムスタンプ署名に関連付けられた証明書がWindows証明書ストアの信頼されたルートCAの1つにチェーンバックするだけでは不十分です。そうでない場合、独自のAuthenticodeキーを使用してタイムスタンプに署名し、演習全体を無意味にすることができます(期限切れの証明書を使用して署名を作成し、過去のタイムスタンプを偽造できます)。
Windowsが署名を受け入れる前に証明書をチェックするX.509タイムスタンプ属性はありますか?もしそうなら、どのようにしてそのような証明書を取得できますか?
または、個別のAuthenticodeタイムスタンプ信頼階層はありますか?
タイムスタンプ機関の証明書は、それ自体が特定のid-kp-timeStamping
オブジェクト識別子(別名1.3.6.1.5.5.7.3.8)を通知する拡張キー使用法拡張が含まれている場合にのみ受け入れられます。 Authenticodeのタイムスタンプは RFC 3161 形式に準拠していませんが、TSA証明書のルールは同じです( セクション2. を参照)。
Authenticodeタイムスタンプ あり に関する情報があります。標準(RFC 3161)のタイムスタンプと同様に、PKCS#7(別名 "CMS")に依存していますが、TSAによって署名されるデータ要素の正確な形式は異なります。
このブログ投稿 Authenticodeをサポートする、ある種の「独自のTSA」製品(私はまったく試していません)を宣伝します。これは間接的に、独自のTSA証明書を作成し、それをAuthenticodeタイムスタンプに有効であるとWindowsに受け入れさせることが可能であることを意味します。
すべてのCAは、「TSA」オブジェクト識別子を含む証明書を発行できます(概念的な問題はありません)が、ほとんどの確立されたCAは、ほとんどの場合需要がないために発行しません。 TSAを適切に実行することは、時間の概念を変更する外部の試みに対して復元力のある十分な正確なクロックを維持することを意味します(NTP!)、そしてそれは簡単ではありません。秒未満の精度を実現しようとすると、実際には非常に困難です(たとえば、うるう秒を処理する必要があるため、単に無視することはできません)。