Saya menggunakan file batch berikut yang loop maksimal 300 kali. Ada dua argumen,% 1 adalah jalur ke folder yang berisi file batch, file pfx dan signtool.exe. % 2 adalah path lengkap ke file yang sedang ditandatangani. Anda dapat memanggil ini dalam acara pasca pembangunan studio visual Anda dengan sesuatu seperti panggilan "$ (SolutionDir) thirdparty \ penandatanganan \ sign.bat" "$ (SolutionDir) pihak ketiga \ penandatanganan" "$ (TargetPath)" Saya telah memodifikasi file batch ini menjadi menggunakan server timestamp yang berbeda di setiap iterasi. Saat ini ia menggunakan Comodo, Verisign, GlobalSign, dan Starfield. Semoga ini adalah The Ultimate Signing Script;)
@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
Saya juga menempatkan http://timestamp.comodoca.com ke situs terpercaya (terima kasih Vince). Saya pikir itu mungkin langkah penting. Saya juga memperbarui sertifikat root di PC.
%%a
variabel tidak pernah digunakan. Apakah ada kesalahan ketik di loop for atau di komentar?/p
adalah kata sandi * .pfx.Saya tidak yakin apakah server timestamp harus dimiliki oleh root CA atau tidak.
Kami menggunakan http://timestamp.comodoca.com/authenticode (dan memiliki sertifikat autentikode Comodo) tetapi sebenarnya memiliki masalah serupa, di mana server mereka tampaknya memberikan kesalahan atau kadang-kadang waktu habis. Kami melakukan penandatanganan sebagai bagian dari build nightly (atau on-demand) di server integrasi berkelanjutan kami hanya untuk build Rilis (bukan untuk build Debug).
Saya mengatasi ini (kebanyakan) dengan dua cara:
Di antara semua ini, kegagalan build yang disebabkan oleh masalah server timestamp telah berubah dari sekali atau dua kali seminggu menjadi hampir tidak pernah sama sekali.
EDIT: Saya memiliki tugas MSBuild yang melakukan ini (serta membaca kata sandi sertifikat yang disimpan di luar repositori ) di https://gist.github.com/gregmac/4cfacea5aaf702365724
sumber
Ini bekerja dengan baik dengan mengganti url timestamp verisign dengan salah satu dari ini:
http://timestamp.comodoca.com/authenticode
http://www.trustcenter.de/codesigning/timestamp
sumber
Layanan cap waktu VeriSign tidak dikenai biaya. Mungkin itu sebabnya keandalannya kurang dari cukup; mereka tidak memberikan anggaran untuk pemeliharaan!
Jelas ini masalah besar . Waktu yang terbuang karena build yang gagal dari kegagalan kode timestamping adalah masalah yang berkembang di seluruh industri pengembangan perangkat lunak. Tentu, Anda dapat menulis skrip yang rumit untuk diputar, sampai Anda menemukan server stamping waktu yang berfungsi .. tapi, benarkah?
Kita harus menuntut yang lebih baik. Kami membayar BANYAK untuk sertifikat ini.
Perhatikan bahwa saya kemudian menemukan server stempel waktu alternatif yang hanya sedikit orang yang pernah mendengarnya baik-baik saja untuk digunakan dalam periode di mana Verisign dan Comodo tidak aktif (biasanya terjadi selama jam kerja pada hari kerja).
sumber
Semua server stempel waktu dapat digunakan: Saya baru-baru ini beralih dari server stempel waktu penerbit saya ke Verisign karena saya menemukan bahwa server GlobalSign tidak dapat diandalkan. Selain itu, Thawte tidak menjalankan server timestamp mereka sendiri, tetapi merekomendasikan orang untuk menggunakan Verisign.
sumber
Anda biasanya dapat menggunakan layanan stempel waktu yang Anda inginkan. Meskipun sebagian besar CA akan menyediakan layanan cap waktu. Contoh
timestamp.verisign.com secara resmi EOL di backend tahun 2019 untuk info lebih lanjut dia menjawab pertanyaan saya di bawah ini.
http-timestamp-verisign-com-scripts-timstamp-dll-tidak tersedia
sumber
Saya memiliki masalah yang sama. server verisign kadang-kadang tidak dapat dijangkau untuk beberapa file yang saya coba tanda tangani (tetapi file lain dalam versi yang sama ditandatangani dengan benar).
Saya biasanya mencoba lagi dan berhasil tetapi hari ini, tidak mungkin.
Jadi setelah beberapa penelitian yang tidak berguna di internet saya mencoba menempatkan http: //*.verisign.com di situs zona tepercaya dan berhasil ... Akhirnya saya tidak tahu apakah server memiliki masalah dan sekarang berfungsi atau apakah saya melakukan hal yang benar, saya akan lihat di hari-hari berikutnya. Semoga dapat membantu orang lain yang diblokir.
Konfigurasi server: Windows server 2003 sp2, IE8, keamanan yang ditingkatkan.
sumber
Anda dapat menggunakan Jsign sebagai ganti signtool untuk menandatangani dan memberi stempel waktu pada build Anda, ini mendukung pengalihan ke layanan cap waktu alternatif.
Sintaks baris perintah terlihat seperti ini:
Anda juga dapat mengkonfigurasi jumlah percobaan (dengan
--tsretries
) dan penundaan antara percobaan (dengan--tsretrywait
).sumber