CodeSign Signtool 서명 가이드

본 문서를 보기 전 인증서 설치에 필요한 프로그램이 모두 PC에 설치되어 있는지 확인해주세요.
CodeSign에 필요한 프로그램이 설치 되어 있지 않으면 CodeSign 인증서를 사용하실 수 없습니다.

필수 프로그램 설치 여부 확인 하기 →

⚠️ 토큰 패스워드 주의사항

• USB(SafeNet eToken 5110cc 토큰)로 서명 진행 시 마지막 단계에 토큰 인증서 패스워드를 입력해야 합니다.
토큰 인증서 패스워드를 5회 이상 잘못 입력하면 토큰이 잠깁니다.  [USB 토큰 초기화 가이드 바로가기 →]
• 토큰이 잠긴 경우 토큰 초기화가 필요하며, 초기화 시 저장된 인증서는 삭제됩니다.
• 토큰 초기화 이후 인증서 재발급이 필요하며, 재발급 비용은 발생하지 않습니다.
토큰을 초기화 한 경우, 주문번호화 함께 "토큰 초기화 진행, 인증서 재발급 요청" 메일을 kcs_support@ucert.co.kr로 보내주세요.

Step1. 인증서 정상 등록 여부 확인

SafeNet 프로그램을 클릭하여 SafeNet Token(USB)에 아래와 같이 인증서가 추가되어 있는지 확인합니다.

▶ 사용자 인증서 > 발급 대상의 인증서 더블클릭하여 인증서 만료일자 확인

SafeNet Authentication Client 인증서 확인

Step2. 디지털 서명하기

⚠️ 서명 시 주의사항

• exe 또는 sys 파일 외 해당 프로그램을 구성하는 모든 파일(.dll, .ocx, .exe, .sys 등)도 함께 서명해야 합니다.
• 구성 파일 중 하나라도 서명되지 않으면 보안 경고가 발생할 수 있습니다.
• 프로그램 설치 시 포함되는 모든 실행 파일과 라이브러리 파일을 확인하여 서명하시기 바랍니다.

▶ 프로그램 서명 방법

아래 서명 절차는 exe, sys를 포함한 모든 실행 파일 및 라이브러리 파일에 동일하게 적용됩니다.

1단계: 명령 프롬프트창(cmd : 관리자 권한으로 실행 권장)에서 signtool 이 있는 경로로 이동

C:\Windows\system32>cd C:\Program Files (x86)\Windows Kits\10\App Certification Kit

2단계: 서명 명령어 입력

signtool sign /a /v /s MY /n [게시자명] /as /fd sha256 /tr http://timestamp.globalsign.com/tsa/r6advanced1 /sha1 [지문값] /td SHA256 [서명할 파일]

* 타임스탬프 URL (신청된 인증서에 알맞는 타임스탬프를 사용하세요.)
- GlobalSign : http://timestamp.globalsign.com/tsa/r6advanced1
- Digicert : http://timestamp.digicert.com
- Sectigo : http://timestamp.comodoca.com/rfc3161

* 지문값 확인 방법:

인증서 지문값 확인

3단계: 서명 명령어 입력 후 패스워드 입력

서명 실행 결과 예시:

C:\Program Files (x86)\Windows Kits\10\App Certification Kit>signtool sign /a /v /s MY /n "Korea Corporation Security Co.,Ltd." /as /fd sha256 /tr http://timestamp.globalsign.com/tsa/r6advanced1 /sha1 29BE3F12FFBD03B7B35D7C41ADDB104FC7803B36 /td SHA256 "CHKTRUST.EXE"

The following certificate was selected:
    Issued to: Korea Corporation Security Co.,Ltd.
    Issued by: GlobalSign GCC R45 EV CodeSigning CA 2020
    Expires: Sun Mar 19 20:00:06 2023
    SHA1 hash: 29BE3F12FFBD03B7B35D7C41ADDB104FC7803B36

Done Adding Additional Store
Successfully signed: CHKTRUST.EXE

Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0

4단계: 명령 프롬프트창에서 인증서 확인하기

signtool.exe verify /v /pa [서명한 파일명]

아래 표시된 Signing Certificate Chain 과 같이체인 연결구조로 보여진다면 정상 서명된 것을 의미합니다.

C:\Program Files (x86)\Windows Kits\10\App Certification Kit>signtool.exe verify /v /pa CHKTRUST.EXE

Verifying: CHKTRUST.EXE

Signature Index: 0 (Primary Signature)
Hash of file (sha256): 4EAEA6D794D98E27E3DAEDCBA7729B274A1B3339E150110CFD3D50FD7E2A36BC

Signing Certificate Chain:
    Issued to: GlobalSign Root CA
    Issued by: GlobalSign Root CA
    Expires: Fri Jan 28 21:00:00 2028
    SHA1 hash: B1BC968BD4F49D622AA89A81F2150152A41D829C

        Issued to: GlobalSign
        Issued by: GlobalSign Root CA
        Expires: Fri Jan 28 21:00:00 2028
        SHA1 hash: 0CBFAB97059595EB01EC48EB9EB8657C0E5AAE71

            Issued to: GlobalSign Code Signing Root R45
            Issued by: GlobalSign
            Expires: Sun Mar 18 09:00:00 2029
            SHA1 hash: 4C5D80D2CD06B1A493C49B2E3BED4A57C2F873E5

                Issued to: GlobalSign GCC R45 EV CodeSigning CA 2020
                Issued by: GlobalSign Code Signing Root R45
                Expires: Sun Jul 28 09:00:00 2030
                SHA1 hash: C1CBE7BAD4EEB152424D6A1E3E1117FFEC743D4F

                    Issued to: Korea Corporation Security Co.,Ltd.
                    Issued by: GlobalSign GCC R45 EV CodeSigning CA 2020
                    Expires: Sun Mar 19 20:00:06 2023
                    SHA1 hash: 29BE3F12FFBD03B7B35D7C41ADDB104FC7803B36


The signature is timestamped: Fri Mar 03 10:37:26 2023
Timestamp Verified by:
    Issued to: GlobalSign
    Issued by: GlobalSign
    Expires: Sun Dec 10 09:00:00 2034
    SHA1 hash: 8D94B40EB5A7A1CA119C1FD0D59F810263A7FBD1

        Issued to: GlobalSign Timestamping CA - SHA384 - G4
        Issued by: GlobalSign
        Expires: Sun Dec 10 09:00:00 2034
        SHA1 hash: F5855D092578BF8BF8E721D23524D4A2452AE3D23F9

            Issued to: Globalsign TSA for CodeSign1 - R6
            Issued by: GlobalSign Timestamping CA - SHA384 - G4
            Expires: Sun May 08 16:45:38 2039
            SHA1 hash: CA3E8CFD7CFD329A9A3BF8B1B5F0E01C4A

Successfully verified: CHKTRUST.EXE

Number of files successfully Verified: 1
Number of warnings: 0
Number of errors: 0

5단계: 서명 확인 하기

▶ 서명된 파일의 속성에서 디지털 서명 내역 확인

서명 확인

▶ 드라이버(.sys) 파일 추가 절차 (EV CodeSign 사용자만)

드라이버(.sys) 파일은 위의 서명 방법과 동일하게 서명한 후, 추가로 마이크로소프트 드라이버 서명 배포 프로세스 절차에 따라 마이크로소프트에 서명된 파일을 제출해야 합니다.

※ 참고사항
• sys 파일 등록 절차 및 문의는 마이크로소프트로 진행해주셔야 하며, 유서트에서는 대행을 진행하지 않습니다.

※ CodeSign 주요 옵션 안내

Sign 명령 주요 옵션 설명
/a 가장 적합한 서명 인증서를 자동으로 선택합니다.
서명 도구는 지정한 모든 조건을 만족하는 유효한 모든 인증서를 찾아서 최대 시간 동안 유효한 인증서를 선택합니다.
이 옵션이 없으면 서명 도구는 유효한 서명 인증서를 하나만 찾게 됩니다.
/v 명령이 성공적으로 실행되는지 또는 실패하는지 여부와 상관없이 자세한 정보 출력을 표시하고 경고 메시지를 표시합니다.
/as 이 서명을 추가합니다. 주 서명이 없으면, 이 서명이 기본 서명을 대체합니다.
/s StoreName 인증서를 검색할 때 열 저장소를 지정합니다. 이 옵션을 지정하지 않으면 My 저장소가 열립니다.
/fd 파일 서명을 만드는 데 사용할 파일 다이제스트 알고리즘을 지정합니다.

참고: 서명 중에 /fd 스위치가 제공되지 않으면 경고가 생성됩니다. 기본 알고리즘은 SHA1 이지만 SHA256 을 권장합니다.
/tr URL RFC 3161 타임스탬프 서버의 URL을 지정합니다. 이 옵션(또는 /t)이 없으면 서명 파일에 타임스탬프가 기록되지 않습니다. 타임스탬프 기록에 실패하면 경고가 생성됩니다. 이 옵션은 /t 옵션과 함께 사용할 수 없습니다.
/td /tr 옵션을 사용하여 RFC 3161 타임스탬프 서버에서 사용하는 다이제스트 알고리즘을 요청합니다.

참고: /td 스위치는 /tr 스위치 앞이 아니라 뒤에서 선언되어야 합니다.
/td 스위치가 /tr 스위치 앞에서 선언되면 의도된 SHA256 알고리즘이 아닌 SHA1 알고리즘에서 타임스탬프가 반환됩니다.

타임스탬프 처리 중에 /td 스위치가 제공되지 않으면 경고가 생성됩니다.
기본 알고리즘은 SHA1 이지만 SHA256 을 권장합니다.
/fd certHash 문자열 certHash 를 지정하면 서명 인증서에 사용되는 알고리즘이 기본값으로 설정됩니다.
참고: Windows 10 키트 빌드 2023 이상에서만 사용할 수 있습니다.
/n SubjectName 서명 인증서의 주체 이름을 지정합니다. 이 값은 주체의 전체 이름에서 부분 문자열이 될 수 있습니다.