モジュールの電子署名 #3 – タイムスタンプサーバーの入れ替え

今年(2021年)に入り、今までモジュールの電子署名に使用していたタイムスタンプサーバーが使えなくなりました。そこで、タイムスタンプサーバーの切り替えをしました。

電子証明書と電子署名とタイムスタンプサーバー

電子証明書と電子署名については、前々回に投稿しました。また、Signtool.exeを使用した電子署名の方法については、前回に投稿しました。それぞれを参照していたければと思います。

今回は、電子署名時に使用するタイムスタンプサーバーについてです。

タイムスタンプサーバーの入れ替え

2021年になって、今まで電子署名するときに使っていたタイムスタンプサーバーで問題が発生しました。

以下の実行例は、2021年1月に実行した例です。2020年まではどれも成功していました。

Done Adding Additional Storeと表示されているので、自身の電子証明書を使った電子署名には成功しています。電子署名の後に行う、SHA1(160ビット)のタイムスタンプ副署名でエラーになっています。SHA1用のタイムスタンプサーバーを利用するとエラーになるようです。

REM SHA1タイムスタンプサーバーを利用
signtool.exe sign /fd sha1 /t http://timestamp.verisign.com/scripts/timstamp.dll C:\test.exe
Done Adding Additional Store
SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147012865/0x80072eff)
REM RFC3161方式のSHA1タイムスタンプサーバーを利用
signtool.exe sign /fd sha1 /tr http://sha1timestamp.ws.symantec.com/sha1/timestamp C:\test.exe
Done Adding Additional Store
SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147012866/0x80072efe)

ただし、下記のようにSHA2-256ビット用のタイムスタンプサーバーでは、問題ありません。

REM RFC3161方式のSHA2-256ビットタイムスタンプサーバーを利用
signtool.exe sign /fd sha256 /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp C:\test.exe
Done Adding Additional Store
Successfully signed: C:\test.exe

このエラーの原因は、従来からあるタイムスタンプサーバーの運用が停止したのです。そのため、それらのタイムスタンプサーバーを使って、タイムスタンプ副署名ができなくなりました。

タイムスタンプサーバーのリプレイスの案内

実は、従来からあるタイムスタンプサーバー(VeriSign/Symantec)の運用が停止することは、DigiCertから、2019年にはアナウンスがありました。

タイムスタンプサーバの変更に関するお知らせ (DigiCert社)

このアナウンスによると、従来からあるタイムスタンプサーバー(VeriSign/Symantec)は、運用が停止し、代替えはDigiCertのタイムスタンプサーバーであるとのこと。

TSAタイプ今までのTSA今後のTSA
Authenticodetimestamp.verisign.com/scripts/timstamp.dlltimestamp.digicert.com/?alg=sha1
RFC 3161 sha1sha1timestamp.ws.symantec.com/sha1/timestamptimestamp.digicert.com/?alg=sha1
RFC 3161 sha256sha256timestamp.ws.symantec.com/sha256/timestamptimestamp.digicert.com/?alg=sha256
タイムスタンプサーバーのリプレイス

また、旧タイムスタンプサーバーのサービス停止日は、2019年の8月と10月とのこと。

TSAサービス停止日サービスへの影響
Authenticode2019年8月16日8月16日以後は、署名コマンドを変更していただく必要があります。
RFC 3161 sha12019年10月31日2019年10月31日以後は、署名コマンドを変更していただく必要があります。
RFC 3161 sha2562019年10月31日2019年10月31日以後は、署名コマンドを変更していただく必要があります。
旧タイムスタンプサーバーのサービス停止日

公式情報では、旧タイムスタンプサーバーのサービス停止は2019年でした。ただ、実際にサーバーを停止させたのが、2020年末であったようです。

そのため、去年(2020年)までは、旧タイムスタンプサーバーが使えていたようです。今年(2021年)になり、旧タイムスタンプサーバーは本当に停止し、使えなくなったようです。

この対策は、タイムスタンプサーバーを変更すればよいだけなので、前回の投稿の署名方法の例であれば、以下のように設定すれば問題ありません。

REM 2019年秋以降から利用できるタイムスタンプサーバー
SET TSA_URL=http://timestamp.digicert.com/?alg=sha1
SET TSA_RFC3161_URL=http://timestamp.digicert.com/?alg=sha256

タイムスタンプサーバーのリプレイス情報の入手時期

実は、DigiCertからのタイムスタンプサーバーのリプレイスの情報は2019年の時点で知っていました。しかし、古いタイムスタンプサーバーが停止されるまで、あえて、古いタイムスタンプサーバーを利用していました。

なぜかというと、新しいタイムスタンプサーバーの証明書の証明書チェーンの最上位のルート証明書が変更されていました。そのため新しいタイムスタンプサーバーの証明書の検証が、古いWindowsで問題なくできるのかがわからなかったからです。古いタイムスタンプサーバーの証明書であれば、古いWindowsでも問題がないことがわかっているので、使い続けていました。

ただ、古くから使われているタイムスタンプサーバーが停止した今となっては、乗り換えるしかありません。そのため、今回のタイミングで、新しいタイムスタンプサーバーに乗り換えました。


今回の投稿では、タイムスタンプサーバーの切り替えについての投稿でした。

コメントを残す