すべての本番ビルドに対してコード署名とタイムスタンプを実行します。ときどき(通常、RTM(!))になるとき)Verisignのタイムスタンプサーバー( " http://timestamp.verisign.com/scripts/timstamp。 dll ")は断続的にオフラインにすることを決定します。
この場合、何をすべきですか?
最大300回ループする次のバッチファイルを使用します。 2つの引数があります。%1は、バッチファイル、pfxファイル、およびsigntool.exeを含むフォルダーへのパスです。 %2は、署名されるファイルへのフルパスです。 Visual Studioのポストビルドイベントで、「$(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のルート証明書も更新しました。
タイムスタンプサーバーをルートCAが所有する必要があるかどうかはわかりません。
http://timestamp.comodoca.com/authenticode (およびComodo authenticode証明書を使用)を使用しますが、実際には同様の問題があり、サーバーでエラーが発生したり、タイムアウトしたりすることがあります。リリースビルドのみ(デバッグビルド用ではない)の継続的統合サーバーでの夜間(またはオンデマンド)ビルドの一部として署名します。
私はこれを(主に)2つの方法で回避しました:
これらの間で、タイムスタンプサーバーの問題が原因で発生するビルドエラーは、週に1〜2回発生するものから、ほとんど発生しません。
編集:これを行うMSBuildタスクがあります(と同様に リポジトリの外部に保存された証明書のパスワードを読み取ります ) https://Gist.github.com/gregmac/4cfacea5aaf702365724 =
VerisignタイムスタンプURLを次のいずれかで置き換えることにより、うまく機能します。
http://timestamp.comodoca.com/authenticode
http://www.trustcenter.de/codesigning/timestamp
任意のタイムスタンプサーバーを使用できます。GlobalSignのサーバーが信頼できないことがわかったため、最近発行者のタイムスタンプサーバーからVerisignに切り替えました。さらに、Thawteは独自のタイムスタンプサーバーを実行しませんが、 推奨 Verisignを使用する人々。
VeriSignタイムスタンプサービスは無料です。それがおそらく信頼性が十分ではない理由かもしれません。彼らはそれにメンテナンスに予算を与えません!
間違いなく、これはbigの問題です。コードのタイムスタンプの失敗によるビルドの失敗による無駄な時間は、ソフトウェア開発業界全体で拡大している問題です。確かに、稼働中のタイムスタンプサーバーが見つかるまで、回転する複雑なスクリプトを作成できます。
より良く要求する必要があります。これらの証明書については、多くを支払います。
後で、VerisignとComodoがダウンしている期間(通常は就業日の就業時間中に発生する)に使用してもよいと聞いたタイムスタンプサーバーがほとんどなかったことに注意してください。
同じ問題がありました。 verisignサーバーは、私が署名しようとしたファイルの一部に到達できませんでした(ただし、同じビルド内の他のファイルは正しく署名されていました)。
私は通常再試行しますが、今日は機能しますが、機能しません。
だからインターネットでいくつかの役に立たない研究の後、私はhttp://*.verisign.comを信頼されたゾーンのサイトに入れようとしましたが、それは動作します...正しいことは、私が思うに、次の日に表示されます。それがブロックされている他の人を助けるかもしれないことを願っています。
サーバー構成:Windows Server 2003 SP2、IE8、セキュリティ強化。