บริการประทับเวลาทางเลือกสำหรับ Authenticode


115

เราดำเนินการเซ็นชื่อรหัสและประทับเวลาสำหรับงานสร้างทั้งหมดของเรา ในบางครั้ง (โดยปกติเมื่อเรากำลังจะ RTM (!)) เซิร์ฟเวอร์ประทับเวลาที่ Verisign (" http://timestamp.verisign.com/scripts/timstamp.dll ") จะตัดสินใจออฟไลน์เป็นระยะ ๆ

เราควรทำอย่างไรในกรณีนี้?

  • เซิร์ฟเวอร์การประทับเวลาต้องโฮสต์โดยผู้ออกใบรับรองหลักของคุณหรือไม่
  • มีเซิร์ฟเวอร์การประทับเวลาที่โฮสต์บนเครือข่ายอื่นใดที่เราสามารถใช้แทน Verisign ได้หรือไม่หากเซิร์ฟเวอร์ของพวกเขาหยุดทำงาน ข้อเสนอแนะสำหรับทางเลือกอื่น ๆ ที่มีอยู่สูงและฟรียินดีต้อนรับ :)

คำตอบ:


91

ฉันใช้ไฟล์แบตช์ต่อไปนี้ซึ่งวนซ้ำได้สูงสุด 300 ครั้ง มีสองอาร์กิวเมนต์% 1 คือพา ธ ไปยังโฟลเดอร์ที่มีไฟล์แบทช์ไฟล์ pfx และ signtool.exe % 2 คือเส้นทางแบบเต็มไปยังไฟล์ที่เซ็นชื่อ คุณสามารถเรียกสิ่งนี้ในเหตุการณ์สร้างภาพหลังสตูดิโอของคุณด้วยสิ่งที่เรียกว่า "$ (SolutionDir) thirdparty \ sign \ sign.bat" "$ (SolutionDir) thirdparty \ Sign" "$ (TargetPath)" ฉันได้แก้ไขไฟล์แบตช์นี้เป็น ใช้เซิร์ฟเวอร์การประทับเวลาที่แตกต่างกันในการทำซ้ำแต่ละครั้ง ปัจจุบันใช้ Comodo, Verisign, GlobalSign และ Starfield หวังว่านี่คือ 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

ฉันใส่http://timestamp.comodoca.comลงในไซต์ที่เชื่อถือได้ด้วย (ขอบคุณ Vince) ผมคิดว่านั่นอาจเป็นก้าวสำคัญ ฉันอัปเดตใบรับรองหลักบนพีซีด้วย


3
ฉันแค่บิ่นที่นี่ ฉันรู้ว่านี่เป็นคำตอบเก่า ๆ แต่สคริปต์นี้ "เกือบ" สมบูรณ์แบบและฉันก็อยากจะเปลี่ยนไป เมื่อสคริปต์ถูกรันเป็นเหตุการณ์หลังการสร้าง หากการประทับเวลาล้มเหลว แต่การประทับเวลาต่อไปนี้ประสบความสำเร็จการสร้างยังคงล้มเหลวเนื่องจาก MSBuild สอดแนมเหตุการณ์ที่เกิดขึ้นของ signtool.exe และเห็นความล้มเหลวจึงคิดว่าเป็นความล้มเหลว ฉันมีสิ่งนี้เกิดขึ้นภายใน VS2012 และจากเครื่องสร้าง การแก้ไขของฉันคือการเปลี่ยนการประทับเวลาเป็นนามธรรมเป็น cmd อื่นเพื่อให้ MSBuild ไม่สามารถสอดแนมได้เช่น: เริ่ม / รอ "Sign Tool" / D "% 1" "signtool.exe" timestamp / t %% s% 2
Skintkingle

1
ฉันไม่เข้าใจ"และลองสูงสุดครั้งที่สิบ ..."ส่วนหนึ่ง %%aตัวแปรไม่เคยใช้ มีการพิมพ์ผิดใน for loop หรือในความคิดเห็นหรือไม่?
l33t

1
หมายเหตุเพิ่มเติมสำหรับคำตอบที่ยอดเยี่ยมของ flobadob หากคุณจะใช้สิ่งนี้ในขั้นตอนหลังการสร้างในวิชวลสตูดิโอคุณจะต้องใช้คำสั่ง "โทร" ดูโพสต์นี้: Visual Studio Multiple Post Build Commands
GadgetNC

1
สำหรับ sha256 คุณต้องใช้ / tr " sha256timestamp.ws.symantec.com/sha256/timestamp " ซึ่งตอนนี้ค่อนข้างเร็ว
วินซ์

1
สำหรับทุกคนที่สงสัย ใช่ค่าหลังจากนั้น/pคือรหัสผ่าน * .pfx
JensG

16

ฉันไม่แน่ใจว่าเซิร์ฟเวอร์การประทับเวลาต้องเป็นของ CA หลักหรือไม่

เราใช้http://timestamp.comodoca.com/authenticode (และมีใบรับรอง Comodo authenticode) แต่จริงๆแล้วมีปัญหาที่คล้ายกันเนื่องจากเซิร์ฟเวอร์ของพวกเขาดูเหมือนจะให้ข้อผิดพลาดหรือหมดเวลาในบางครั้ง เราทำการเซ็นชื่อเป็นส่วนหนึ่งของบิวด์ (หรือตามความต้องการ) ทุกคืนบนเซิร์ฟเวอร์การรวมต่อเนื่องของเราสำหรับรีลีสบิลด์เท่านั้น (ไม่ใช่สำหรับดีบักบิลด์)

ฉันได้รับสิ่งนี้ (ส่วนใหญ่) ในสองวิธี:

  • หากการเรียกไปที่ signtool.exe ล้มเหลวจะพยายามอีกครั้ง (ทันที) อีกสองครั้ง
  • สคริปต์การสร้างใช้เพื่อลงนาม exe ทุกตัวในขั้นตอนเดียว (และเรามีหลายตัวเป็นส่วนหนึ่งของผลิตภัณฑ์ของเรา) และตอนนี้มันทำงานทีละรายการ - ใช้เวลานานกว่าเล็กน้อย แต่มีโอกาสน้อยที่จะล้มเหลว

ระหว่างนี้ความล้มเหลวของการสร้างที่เกิดจากปัญหาเซิร์ฟเวอร์การประทับเวลาได้หายไปจากสัปดาห์ละครั้งหรือสองครั้งจนแทบไม่เคย

แก้ไข: ฉันมีงาน MSBuild ที่ทำสิ่งนี้ (รวมถึงอ่านรหัสผ่านใบรับรองที่เก็บไว้นอกที่เก็บ ) ที่https://gist.github.com/gregmac/4cfacea5aaf702365724


12

มันทำงานได้ดีโดยการแทนที่ url ประทับเวลา verisign ด้วยหนึ่งในเหล่านี้:

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


2
ดูเหมือนว่าจะไม่มีการประทับเวลาจาก trustcenter.de อีกต่อไป: "Symantec All Products and Services ที่ให้บริการโดย TC TrustCenter GmbH ไม่มีให้บริการอีกต่อไปคำถามใด ๆ ที่เกี่ยวข้องกับสิ่งนี้ควรส่งไปที่: Symantec TC TrustCenter โทรศัพท์สนับสนุนตลอด 24 ชั่วโมงทุกวัน: +1 -800-579-2848 หรือ + 1-520-477-3104 "
Valdimar

8

บริการประทับเวลา VeriSign ไม่มีค่าใช้จ่าย นั่นอาจเป็นเหตุผลว่าทำไมความน่าเชื่อถือจึงน้อยกว่าเพียงพอ พวกเขาไม่ให้งบประมาณในการบำรุงรักษา!

แน่นอนว่านี่เป็นปัญหาใหญ่ การเสียเวลาเนื่องจากการสร้างที่ล้มเหลวจากความล้มเหลวในการประทับเวลารหัสเป็นปัญหาที่เพิ่มมากขึ้นทั่วทั้งอุตสาหกรรมการพัฒนาซอฟต์แวร์ แน่นอนคุณสามารถเขียนสคริปต์ที่ซับซ้อนเพื่อหมุนเวียนจนกว่าคุณจะพบเซิร์ฟเวอร์การประทับเวลาทำงาน .. แต่จริงเหรอ?

เราควรเรียกร้องดีกว่า เราจ่ายเงินเป็นจำนวนมากสำหรับใบรับรองเหล่านี้

โปรดทราบว่าในภายหลังฉันพบเซิร์ฟเวอร์การประทับเวลาสำรองซึ่งมีเพียงไม่กี่คนที่เคยได้ยินว่าใช้งานได้ดีในช่วงที่ Verisign และ Comodo หยุดทำงาน (โดยปกติจะเกิดขึ้นในช่วงเวลาทำงานในวันทำงาน)


7

สามารถใช้เซิร์ฟเวอร์ประทับเวลาใดก็ได้: ฉันเพิ่งเปลี่ยนจากเซิร์ฟเวอร์ประทับเวลาของผู้ออกเป็น Verisign เนื่องจากพบว่าเซิร์ฟเวอร์ของ GlobalSign ไม่น่าเชื่อถือ นอกจากนี้ Thawte ไม่ได้เรียกใช้เซิร์ฟเวอร์การประทับเวลาของตนเอง แต่แนะนำให้ผู้คนใช้ Verisign


1
Thawte คือ Verisign ดังนั้น
StackExchange User

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 เป็น EOL อย่างเป็นทางการที่แบ็กเอนด์ของปี 2019 สำหรับข้อมูลเพิ่มเติมที่เธอตอบคำถามด้านล่าง

http-ประทับเวลา-VeriSign คอมสคริปต์-timstamp-dll ที่ไม่สามารถใช้ได้


กำลังมองหาสเปคของ digicert alg! เอกสารนี้อยู่ที่ไหน
yano

1
knowledge.digicert.com/alerts/…หวังว่านี่จะช่วยได้
RickWeb

3

ผมมีปัญหาเหมือนกัน. เซิร์ฟเวอร์ verisign ไม่สามารถเข้าถึงได้ในบางครั้งสำหรับบางไฟล์ที่ฉันพยายามลงชื่อ (แต่ไฟล์อื่น ๆ ในบิลด์เดียวกันได้รับการลงชื่ออย่างถูกต้อง)

ฉันมักจะลองใหม่และได้ผล แต่วันนี้ไม่มีทาง

ดังนั้นหลังจากการค้นคว้าที่ไม่เป็นประโยชน์บนอินเทอร์เน็ตฉันพยายามใส่ http: //*.verisign.com ในไซต์โซนที่เชื่อถือได้และใช้งานได้ ... ในที่สุดฉันก็ไม่รู้ว่าเซิร์ฟเวอร์มีปัญหาหรือไม่และตอนนี้ใช้งานได้หรือไม่ สิ่งที่ถูกต้องฉันคิดว่าจะได้เห็นในวันหน้า หวังว่ามันอาจจะช่วยคนอื่น ๆ ที่ถูกบล็อก

การกำหนดค่าเซิร์ฟเวอร์: Windows Server 2003 sp2, IE8, การรักษาความปลอดภัยขั้นสูงบน


อาจเป็นเรื่องบังเอิญเมื่อฉันพบว่าไซต์นั้นถูกครอบงำและลงไป คุณสามารถดูได้ในช่วงเวลาทำการที่เร่งรีบบ่อยครั้ง
dyasta

1

คุณสามารถใช้Jsignแทน signtool เพื่อลงนามและประทับเวลาบิวด์ของคุณได้ซึ่งสนับสนุนการล้มเหลวในการใช้บริการประทับเวลาอื่น

ไวยากรณ์ของบรรทัดคำสั่งมีลักษณะดังนี้:

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)


ด้วยชื่อที่คุณคิดว่ามันสามารถจัดการกับ JARs ได้
caduceus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.