今年(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 |
---|---|---|
Authenticode | timestamp.verisign.com/scripts/timstamp.dll | timestamp.digicert.com/?alg=sha1 |
RFC 3161 sha1 | sha1timestamp.ws.symantec.com/sha1/timestamp | timestamp.digicert.com/?alg=sha1 |
RFC 3161 sha256 | sha256timestamp.ws.symantec.com/sha256/timestamp | timestamp.digicert.com/?alg=sha256 |
また、旧タイムスタンプサーバーのサービス停止日は、2019年の8月と10月とのこと。
TSA | サービス停止日 | サービスへの影響 |
---|---|---|
Authenticode | 2019年8月16日 | 8月16日以後は、署名コマンドを変更していただく必要があります。 |
RFC 3161 sha1 | 2019年10月31日 | 2019年10月31日以後は、署名コマンドを変更していただく必要があります。 |
RFC 3161 sha256 | 2019年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でも問題がないことがわかっているので、使い続けていました。
ただ、古くから使われているタイムスタンプサーバーが停止した今となっては、乗り換えるしかありません。そのため、今回のタイミングで、新しいタイムスタンプサーバーに乗り換えました。
今回の投稿では、タイムスタンプサーバーの切り替えについての投稿でした。