SignTool - "Error: SignerSign() failed." (-2146869243/0x80096005)
이상하군요, 그동안 잘 되다가 어느 순간 동일한 명령어의 서명 작업이 오류가 발생합니다. 문제가 발생한 것은 2중 서명 작업이었는데요,
signtool.exe의 다중 서명 기능
; https://www.sysnet.pe.kr/2/0/10875
즉, 첫 번째 서명은 잘 되는데,
C:\temp> signtool sign /sm /n TestCert /t http://timestamp.digicert.com setup.exe
Done Adding Additional Store
Successfully signed: setup.exe
두 번째의 sha256 서명에서 실패합니다.
C:\temp> signtool sign /as /sm /n TestCert /fd sha256 /tr http://timestamp.digicert.com setup.exe
Done Adding Additional Store
SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2146869243/0x80096005)
문서를 보니까,
Troubleshooting Timestamping Problems
; https://knowledge.digicert.com/solution/troubleshooting-timestamping-problems
RFC3161 compliant Time Stamp Authority (TSA) server
; https://knowledge.digicert.com/general-information/rfc3161-compliant-time-stamp-authority-server
일단 timestamp 서버는 정상 작동 중인 것 같습니다.
C:\temp> curl -i timestamp.digicert.com/timestamp/health/heartbeat
HTTP/1.1 204 No Content
Date: Tue, 10 Jun 2025 12:33:31 GMT
대신 옵션에서 달라진 점이 있긴 한데요,
/tr http://timestamp.digicert.com /td SHA256
제 경우에는 /fd 옵션을 주었는데 /td 옵션이 추가된 것입니다. 다행히 이대로 하면 정상적으로 다중 서명은 되지만,
signtool sign /as /sm /n TestCert /tr http://timestamp.digicert.com /td sha256 setup.exe
정작 속성창에서 보면, "Digest algorithm"이 sha256이 아닌 sha1로 나옵니다.
원래 sha256 알고리즘으로 나왔던 것과는 달라서 왠지 찝찝한데요, 혹시나 싶어 /fd 옵션도 함께 추가했는데,
signtool sign /as /sm /n TestCert /tr http://timestamp.digicert.com /fd sha256 /td sha256 setup.exe
잘됩니다. ^^ signtool.exe의 옵션 설명에 보면,
/fd Specifies the file digest algorithm to use for creating file
signatures. (Default is SHA1)
/td Used with the /tr or /tseal switch to request a digest algorithm
used by the RFC 3161 timestamp server.
/fd 옵션은 파일 서명에 사용되는 해시 알고리즘이고, /td 옵션은 RFC 3161 타임스탬프 서버에서 사용하는 해시 알고리즘을 명시하는 옵션입니다. 즉, 그 2개의 옵션이 서로 배타적이지 않은 별개의 기능을 나타낸 것입니다.
정리하면, 아마도 어느 순간 digicert 측의 timestamp 서버에서 받아들이는 해시 알고리즘이 변경되면서 발생한 문제 같습니다.
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]