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.