Layanan cap waktu alternatif untuk Authenticode

115

Kami melakukan penandatanganan kode dan cap waktu untuk semua build produksi kami. Kadang-kadang (biasanya ketika kita akan RTM (!)) Server timestamp di Verisign (" http://timestamp.verisign.com/scripts/timstamp.dll ") memutuskan untuk offline sebentar-sebentar.

Apa yang harus kita lakukan dalam kasus ini?

  • Apakah server timestamp harus dihosting oleh otoritas sertifikasi root Anda?
  • Apakah ada server stempel waktu yang dihosting jaringan lain yang dapat kami gunakan selain Verisign jika server mereka tidak aktif? Saran untuk alternatif lain yang sangat tersedia dan gratis dipersilakan :)
Stephen Connolly
sumber

Jawaban:

91

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.

flobadob.dll
sumber
3
Aku hanya memotong di sini. Saya tahu ini adalah jawaban lama. Tapi skrip ini "hampir" sempurna jadi saya hanya ingin menambahkan perubahan saya. Saat skrip dijalankan sebagai acara pasca-pembuatan. Jika stempel waktu gagal tetapi stempel waktu berikut berhasil, build masih gagal karena MSBuild mengamati kejadian signtool.exe dan melihat kegagalan, sehingga menganggapnya sebagai kegagalan. Saya telah mengalami ini terjadi dalam VS2012 dan dari mesin build. Perbaikan saya adalah mengubah stempel waktu menjadi abstrak menjadi cmd lain sehingga MSBuild tidak dapat memata-matai seperti: mulai / tunggu "Sign Tool" / D "% 1" "signtool.exe" timestamp / t %% s% 2
Skintkingle
1
Saya tidak mengerti bagian "dan coba lagi maksimal sepuluh kali ..." . The %%avariabel tidak pernah digunakan. Apakah ada kesalahan ketik di loop for atau di komentar?
l33t
1
Catatan tambahan untuk jawaban bagus flobadob. Jika Anda akan menggunakan ini dalam langkah Pasca-Bangun di studio visual, Anda perlu menggunakan pernyataan "Panggil". Lihat posting ini: Visual Studio Multiple Post Build Commands
GadgetNC
1
Untuk sha256 Anda perlu menggunakan / tr " sha256timestamp.ws.symantec.com/sha256/timestamp " sekarang yang lumayan cepat
Vince
1
Untuk semua orang yang bertanya-tanya. Ya, nilai setelah itu /padalah kata sandi * .pfx.
JensG
16

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:

  • Jika panggilan ke signtool.exe gagal, ia mencoba lagi (segera) dua kali lagi
  • Skrip build yang digunakan untuk menandatangani setiap exe dalam satu langkah (dan kami memiliki beberapa sebagai bagian dari produk kami), dan sekarang melakukannya satu per satu - membutuhkan waktu sedikit lebih lama, tetapi kecil kemungkinannya untuk gagal

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

gregmac
sumber
12

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

David
sumber
2
Sepertinya stempel waktu tidak lagi tersedia dari trustcenter.de: "Symantec Semua Produk dan Layanan yang disediakan oleh TC TrustCenter GmbH tidak lagi tersedia. Semua pertanyaan yang berkaitan dengan ini harus ditujukan ke: Symantec TC TrustCenter 24/7 Telepon Dukungan Telepon: +1 -800-579-2848 atau + 1-520-477-3104 "
Valdimar
8

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).

dyasta.dll
sumber
7

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.

BCran
sumber
1
Nah, Thawte adalah Verisign, jadi.
Pengguna StackExchange
4

Anda biasanya dapat menggunakan layanan stempel waktu yang Anda inginkan. Meskipun sebagian besar CA akan menyediakan layanan cap waktu. Contoh

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 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

RickWeb
sumber
sudah mencari spesifikasi digicert alg! Dimana ini didokumentasikan?
yano
1
knowledge.digicert.com/alerts/… harap ini bisa membantu
RickWeb
3

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.

Vince
sumber
Mungkin kebetulan karena saya menemukan situs itu kewalahan dan turun. Anda dapat sering melihatnya selama jam kerja sibuk.
dyasta
1

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:

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

Anda juga dapat mengkonfigurasi jumlah percobaan (dengan --tsretries) dan penundaan antara percobaan (dengan --tsretrywait).

Emmanuel Bourg
sumber
dengan nama seperti yang Anda pikir bisa menangani JAR
caduceus