Authenticode에 대한 대체 타임 스탬프 서비스


115

우리는 모든 프로덕션 빌드에 대해 코드 서명 및 타임 스탬프를 수행합니다. 때때로 (보통 우리가 RTM (!)을 시도 할 때) Verisign의 타임 스탬프 서버 ( " http://timestamp.verisign.com/scripts/timstamp.dll ")가 간헐적으로 오프라인으로 전환하기로 결정합니다.

이 경우 어떻게해야합니까?

  • 타임 스탬프 서버는 루트 인증 기관에서 호스팅해야합니까?
  • 서버가 다운 된 경우 Verisign 대신 사용할 수있는 다른 네트워크 호스팅 타임 스탬프 서버가 있습니까? 다른 고 가용성 및 무료 대안에 대한 제안을 환영합니다. :)

답변:


91

최대 300 회 반복되는 다음 배치 파일을 사용합니다. 두 개의 인수가 있습니다. % 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에서도 루트 인증서를 업데이트했습니다.


3
임 그냥 여기에 칩핑. 나는 이것이 오래된 대답이라는 것을 알고 있습니다. 하지만이 스크립트는 "거의"완벽하므로 변경 사항을 조금만 추가하고 싶습니다. 스크립트가 빌드 후 이벤트로 실행되는 경우. 타임 스탬프가 실패했지만 다음 타임 스탬프가 성공한 경우 MSBuild가 signtool.exe의 발생 상황을 감시하고 실패를 확인하여 실패로 간주하므로 빌드가 여전히 실패합니다. VS2012와 빌드 머신에서 이런 일이 발생했습니다. 내 수정은 타임 스탬프를 다른 cmd로 추상화하도록 변경하여 MSBuild가 다음과 같이 스파이 할 수 없도록하는 것입니다. start / wait "Sign Tool"/ D "% 1" "signtool.exe"timestamp / t %% s % 2
— Skintkingle

1
"최대 10 회 재시도 ..." 부분을 이해하지 못합니다 . %%a변수는 사용되지 않습니다. for 루프 또는 주석에 오타가 있습니까?
— l33t 2015-06-02

1
flobadob의 탁월한 답변에 대한 추가 참고 사항. Visual Studio의 빌드 후 단계에서이를 사용하려면 "Call"문을 사용해야합니다. 이 게시물을 참조하십시오 : Visual Studio 다중 빌드 후 명령
— GadgetNC

1
sha256의 경우 / tr " sha256timestamp.ws.symantec.com/sha256/timestamp " 를 사용해야 합니다.이 방법은 상당히 빠릅니다
— Vince

1
궁금한 모든 사람들을 위해. 예 다음 값 /p은 * .pfx 암호입니다.
— JensG

16

타임 스탬프 서버를 루트 CA가 소유해야하는지 확실하지 않습니다.

우리는 사용 http://timestamp.comodoca.com/authenticode을 (그리고 코모도의 인증 코드 인증서가) 실제로 자신의 서버가 가끔 오류 또는 시간을 줄 것으로 보인다 점에서, 유사한 문제가 있습니다. 우리는 릴리스 빌드 전용 (디버그 빌드가 아님)을 위해 지속적 통합 서버에서 야간 (또는 주문형) 빌드의 일부로 서명합니다.

나는 이것을 (대부분) 두 가지 방법으로 해결했습니다.

  • signtool.exe 호출이 실패하면 두 번 더 (즉시) 다시 시도합니다.
  • 한 단계로 모든 exe에 서명하는 데 사용되는 빌드 스크립트 (제품의 일부로 여러 개가 있음), 이제 하나씩 수행합니다. 약간 더 오래 걸리지 만 실패 할 가능성은 적습니다.

이 사이에서 타임 스탬프 서버 문제로 인한 빌드 실패는 일주일에 한두 번에서 거의 전혀 발생하지 않습니다.

편집 : https://gist.github.com/gregmac/4cfacea5aaf702365724 에서이 작업을 수행하는 MSBuild 작업이 있습니다 ( 저장소 외부에 저장된 인증서 암호 를 읽음 ).


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 전화 지원 전화 : +1로 문의해야합니다. -800-579-2848 또는 + 1-520-477-3104 "
— Valdimar

8

VeriSign 타임 스탬프 서비스는 무료입니다. 그것이 아마도 신뢰성이 적절하지 않은 이유 일 수 있습니다. 그들은 유지 보수에 예산을주지 않습니다!

확실히 이것은 큰 문제입니다. 코드 타임 스탬프 오류로 인한 빌드 실패로 인한 시간 낭비는 소프트웨어 개발 산업 전반에서 증가하는 문제입니다. 물론, 작업 타임 스탬프 서버를 찾을 때까지 복잡한 스크립트를 작성하여 순환 할 수 있습니다.하지만 정말요?

우리는 더 나은 것을 요구해야합니다. 우리는 이러한 인증서에 대해 많은 비용을 지불합니다.

나중에 Verisign과 Comodo가 다운 된 기간 (보통 근무 시간 동안 발생)에서 사용하는 것이 거의없는 대체 타임 스탬프 서버를 발견했습니다.


7

모든 타임 스탬프 서버를 사용할 수 있습니다. GlobalSign의 서버가 불안정하다는 사실을 알게 되었기 때문에 최근 발행자의 타임 스탬프 서버에서 Verisign으로 전환했습니다. 또한 Thawte는 자체 타임 스탬프 서버를 실행하지 않지만 사람들에게 Verisign의 사용을 권장 합니다.


1
글쎄, Thawte는 Verisign입니다.
— StackExchange 사용자

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 사양을 찾고있었습니다! 이 문서는 어디에 있습니까?
— yano

1
knowledge.digicert.com/alerts/… 이것이 도움이되기를 바랍니다
— RickWeb

3

나는 같은 문제가 있었다. 내가 서명하려고 한 일부 파일에 대해 verisign 서버에 언젠가 연결할 수 없었습니다 (하지만 동일한 빌드의 다른 파일은 올바르게 서명되었습니다).

나는 보통 재 시도하고 작동하지만 오늘은 안된다.

그래서 인터넷에서 쓸모없는 조사를 한 후에 http : //*.verisign.com을 신뢰할 수있는 영역 사이트에 넣으려고했는데 작동합니다 ... 마지막으로 서버에 문제가 있었는데 이제 작동하는지 또는 옳은 일, 내 생각에 다음 날에 볼 것입니다. 차단 된 다른 사람에게 도움이되기를 바랍니다.

서버 구성 : Windows Server 2003 sp2, IE8, 보안 강화.


아마도 그 사이트가 단순히 압도 당하고 다운되는 것을 알게 된 것은 우연 일 것입니다. 바쁜 업무 시간에 자주 볼 수 있습니다.
— dyasta 2017 년

1

Jsign 을 사용할 수 있습니다. 대신 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.