Authenticodeの代替タイムスタンプサービス


115

すべての製品ビルドに対してコード署名とタイムスタンプを実行します。時々(通常、RTM(!)にしようとしているとき)、Verisign( " http://timestamp.verisign.com/scripts/timstamp.dll ")のタイムスタンプサーバーが断続的にオフラインになることを決定します。

この場合、私たちは何をすべきでしょうか?

  • タイムスタンプサーバーは、ルート証明機関によってホストされる必要がありますか?
  • サーバーがダウンしている場合、Verisignの代わりに使用できる他のネットワークホストのタイムスタンプサーバーはありますか?他の高可用性で無料の代替案の提案は大歓迎です:)

回答:


91

最大300回ループする次のバッチファイルを使用します。2つの引数があります。%1は、バッチファイル、pfxファイル、およびsigntool.exeを含むフォルダーへのパスです。%2は、署名されるファイルへの絶対パスです。これは、「$(SolutionDir)thirdparty \ signing \ sign.bat」「$(SolutionDir)thirdparty \ signing」「$(TargetPath)」などのビジュアルスタジオポストビルドイベントで呼び出すことができます。このバッチファイルを次のように変更しました各反復で異なるタイムスタンプサーバーを使用します。現在、Comodo、Verisign、GlobalSign、Starfieldを使用しています。うまくいけば、これは究極の署名スクリプトです;)

@echo off    

REM create an array of timestamp servers...
set SERVERLIST=(http://timestamp.comodoca.com/authenticode http://timestamp.verisign.com/scripts/timestamp.dll http://timestamp.globalsign.com/scripts/timestamp.dll http://tsa.starfieldtech.com)

REM sign the file...
%1\signtool.exe sign /f %1\comodo.pfx /p videodigital %2

set timestampErrors=0

for /L %%a in (1,1,300) do (

    for %%s in %SERVERLIST% do (

        REM try to timestamp the file. This operation is unreliable and may need to be repeated...
        %1\signtool.exe timestamp /t %%s %2

        REM check the return value of the timestamping operation and retry a max of ten times...
        if ERRORLEVEL 0 if not ERRORLEVEL 1 GOTO succeeded

        echo Signing failed. Probably cannot find the timestamp server at %%s
        set /a timestampErrors+=1
    )

    REM wait 2 seconds...
    choice /N /T:2 /D:Y >NUL
)

REM return an error code...
echo sign.bat exit code is 1. There were %timestampErrors% timestamping errors.
exit /b 1

:succeeded
REM return a successful code...
echo sign.bat exit code is 0. There were %timestampErrors% timestamping errors.
exit /b 0

また、http://timestamp.comodoca.comを信頼済みサイトに追加しました(Vinceに感謝)。それは重要なステップかもしれません。PCのルート証明書も更新しました。


3
私はただここに欠けています。これは古い答えです。しかし、このスクリプトは「ほぼ」完璧なので、私の変更にチップを入れたいと思います。スクリプトがビルド後のイベントとして実行されるとき。タイムスタンプは失敗するが、次のタイムスタンプが成功する場合、MSBuildはsigntool.exeの発生をスパイし、失敗を確認するため、失敗と見なされます。私はこれをVS2012内とビルドマシンから発生しました。私の修正は、タイムスタンプを変更して別のコマンドに抽象化し、MSBuildがそのようにスパイできないようにすることです:start / wait "Sign Tool" / D "%1" "signtool.exe" timestamp / t %% s%2
Skintkingle

1
「最大10回再試行する」という部分がわかりません。%%a変数が使用されることはありません。forループまたはコメントにタイプミスはありますか?
l33t

1
flobadobの優れた答えに対する追加の注記。これをVisual Studioのビルド後の手順で使用する場合は、 "Call"ステートメントを使用する必要があります。この投稿をご覧ください:Visual Studio Multiple Post Build Commands
GadgetNC

1
sha256の場合、/ tr " sha256timestamp.ws.symantec.com/sha256/timestamp " を使用する必要があります。これは、ちなみに非常に高速です
Vince

1
誰もが疑問に思います。はい、その値/pは* .pfxパスワードです。
JensG

16

タイムスタンプサーバーをルートCAが所有する必要があるかどうかはわかりません。

私たちはhttp://timestamp.comodoca.com/authenticodeを使用しています(そしてComodo authenticode証明書を持っています)が、実際には同様の問題があり、サーバーが時々エラーを出すかタイムアウトするようです。継続的インテグレーションサーバーでは、リリースビルドのみ(デバッグビルドではありません)の夜間(またはオンデマンド)ビルドの一部として署名を行います。

私はこれを(主に)2つの方法で回避しました:

  • signtool.exeの呼び出しが失敗した場合、2回以上(すぐに)再試行します。
  • 1つのステップですべてのexeに署名するために使用されたビルドスクリプト(および製品の一部としていくつかあります)は、1つずつ実行されます-少し時間がかかりますが、失敗する可能性は低くなります

これらの間で、タイムスタンプサーバーの問題が原因で発生するビルドエラーは、週に1回または2回の問題から、ほとんど発生しなくなりました。

編集:私はこれを行うのMSBuildタスクを持っている(同様に、リポジトリの外に保存された証明書のパスワードを読み込む)でhttps://gist.github.com/gregmac/4cfacea5aaf702365724


12

これは、verisignのタイムスタンプURLを次のいずれかに置き換えることでうまく機能します。

http://timestamp.comodoca.com/authenticode
http://www.trustcenter.de/codesigning/timestamp


2
trustcenter.deからタイムスタンプを入手できなくなったようです。「TC TrustCenter GmbHが提供するシマンテックのすべての製品とサービスは使用できなくなりました。これに関する質問は、Symantec TC TrustCenter 24/7 Phone Support Phone:+1に送信してください。 -800-579-2848または+ 1-520-477-3104 "
Valdimar

8

VeriSignタイムスタンプサービスは無料です。そのため、信頼性が十分ではないのかもしれません。彼らはそれにメンテナンスの予算を与えません!

確かにこれは大きな問題です。コードのタイムスタンプの失敗によるビルドの失敗による時間の浪費は、ソフトウェア開発業界全体で大きな問題になっています。確かに、稼働中のタイムスタンプサーバーが見つかるまで、複雑なスクリプトをローテーションして作成できます。

より良いものを要求すべきです。これらの証明書にはたくさんの支払いをします。

後で聞いたことのある代替のタイムスタンプサーバーは、VerisignとComodoがダウンしている期間(通常は就業時間中に発生します)に使用しても問題ないことに気づきました。


7

任意のタイムスタンプサーバーを使用できます。GlobalSignのサーバーが信頼できないことがわかったので、最近、発行者のタイムスタンプサーバーからVerisignに切り替えました。さらに、Thawteは独自のタイムスタンプサーバーを実行しませんが、Verisignの使用を推奨します。


1
まあ、ThawteはVerisignなので、
StackExchangeユーザー、2014

4

通常は、任意のタイムスタンプサービスを使用できます。ただし、ほとんどのCAはタイムスタンプサービスを提供します。例

http://timestamp.globalsign.com/scripts/timstamp.dll
http://timestamp.comodoca.com/authenticode
http://www.startssl.com/timestamp
http://timestamp.digicert.com?alg=sha1
http://timestamp.digicert.com?alg=sha256

timestamp.verisign.comは、2019年のバックエンドで正式にEOLでした。詳細については、以下の質問で彼女が回答しました。

http-timestamp-verisign-com-scripts-timstamp-dll-not-available


digicert alg仕様を探していました!これはどこに文書化されていますか?
やの

1
knowledge.digicert.com/alerts/…これがお役に立てば幸い
RickWeb

3

私も同じ問題を抱えていました。署名しようとした一部のファイルでverisignサーバーにアクセスできないことがありました(ただし、同じビルドの他のファイルは正しく署名されていました)。

私は通常再試行し、それは動作しますが、今日、方法はありません。

インターネットでの不必要な調査の後、私はhttp://*.verisign.comを信頼済みゾーンサイトに配置しようとしましたが、それは機能します...最後に、サーバーに問題があり、機能するかどうか、または正しいことは、次の日に表示されると思います。それがブロックされている他のものを助けることを願っています。

サーバー構成:Windowsサーバー2003 SP2、IE8、セキュリティ強化。


たまたまサイトが圧倒されてダウンしただけだと思う​​と偶然でしょう。営業時間のピーク時によく見られます。
dyasta

1

ビルドの署名とタイムスタンプにsigntoolの代わりにJsignを使用できます。これは、代替のタイムスタンプサービスへのフェイルオーバーをサポートします。

コマンドライン構文は次のようになります。

jsign --keystore keystore.p12 --alias test --storepass password \
      --tsaurl http://timestamp.comodoca.com/authenticode,http://timestamp.globalsign.com/scripts/timestamp.dll \
      application.exe

試行回数(を使用--tsretries)および試行間の遅延(を使用)を構成することもできます--tsretrywait


JARを処理できると思うような名前を付けます
caduceus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.