SignTool
SignTool은 파일에 디지털 서명하고, 파일의 서명을 확인하고, 타임스탬프를 만드는 명령줄 도구입니다. 서명 파일이 중요한 이유에 대한 자세한 내용은 코드 서명 소개를 참조하세요.
SignTool은 Windows SDK(소프트웨어 개발 키트)의 일부로 사용할 수 있습니다. 도구는 Windows SDK 설치 경로의 폴더에 설치 \Bin
됩니다( 예: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe
.
참고 항목
Windows SDK, HLK(Windows Hardware Lab Kit), WDK(Windows 드라이버 키트) 및 ADK(Windows 평가 및 배포 키트) 빌드 20236 이상에서는 다이제스트 알고리즘을 지정해야 합니다. SignTool sign
명령에는 서명 및 타임스탬핑 중에 각각 파일 다이제스트 알고리즘 옵션(/fd
) 및 타임스탬프를 지정하는 알고리즘 옵션(/td
)이 필요합니다.
서명하는 동안 지정되지 않았고 타임스탬프를 지정하는 동안 지정되지 않은 경우 /fd
/td
이 명령은 처음에 경고, 오류 코드 0을 throw합니다. 이후 버전의 SignTool에서는 경고가 오류가 됩니다. SHA256을 사용하는 것이 좋습니다. 업계에서 SHA1보다 더 안전한 것으로 간주됩니다.
구문
signtool [command] [options] [file_name | ...]
매개 변수
인수 | 설명 |
---|---|
command |
파일에서 수행할 작업을 지정하는 네 가지 명령 중 하나( catdb , , sign timestamp 또는 verify . 각 명령의 설명에 대해서는 다음 표를 참조하세요. |
options |
명령을 수정하는 옵션입니다. 전역 /q 및 /v 옵션 이외에도 각 명령은 고유한 옵션 집합을 지원합니다. |
file_name |
서명할 파일의 경로입니다. |
SignTool은 다음 명령을 지원합니다.
명령 | 설명 |
---|---|
catdb |
카탈로그 데이터베이스에서 카탈로그 파일을 추가하거나 제거합니다. 카탈로그 데이터베이스는 카탈로그 파일의 자동 조회에 사용되며 GUID를 통해 식별됩니다. 명령에서 지원하는 catdb 옵션 목록은 catdb 명령 옵션을 참조 하세요. |
sign |
파일에 디지털 서명을 수행합니다. 디지털 서명은 파일이 변조되지 않도록 보호하고 사용자가 서명 인증서를 기반으로 서명자를 확인할 수 있도록 합니다. 명령에서 지원하는 sign 옵션 목록은 서명 명령 옵션을 참조 하세요. |
timestamp |
타임스탬프를 지정합니다. 명령에서 지원하는 timestamp 옵션 목록은 타임스탬프 명령 옵션을 참조 하세요. |
verify |
파일의 디지털 서명을 확인합니다. 신뢰할 수 있는 기관에서 서명 인증서를 발급했는지 여부, 서명 인증서가 해지되었는지 여부 및 필요에 따라 서명 인증서가 특정 정책에 유효한지 여부를 결정합니다. 명령에서 지원하는 verify 옵션 목록은 명령 확인 옵션을 참조 하세요. |
다음 옵션은 모든 SignTool 명령에 적용됩니다.
전역 옵션 | 설명 |
---|---|
/q |
명령이 성공적으로 실행되는 경우 출력을 표시하지 않고, 명령이 실패하는 경우 최소 출력을 표시합니다. |
/v |
명령이 성공적으로 실행되는지 또는 실패하는지 여부와 상관없이 자세한 정보 출력을 표시하고 경고 메시지를 표시합니다. |
/debug |
디버깅 정보를 표시합니다. |
Catdb 명령 옵션
다음 표에서는 명령과 함께 사용할 수 있는 옵션을 나열합니다 catdb
.
Catdb 옵션 | 설명 |
---|---|
/d |
기본 카탈로그 데이터베이스가 업데이트되도록 지정합니다. 사용하지 않는 /d /g 경우 SignTool은 시스템 구성 요소 및 드라이버 데이터베이스를 업데이트합니다. |
/g GUID |
GUID로 식별된 카탈로그 데이터베이스가 업데이트되도록 지정합니다. |
/r |
카탈로그 데이터베이스에서 지정된 카탈로그를 제거합니다. 이 옵션을 지정하지 않으면 SignTool은 카탈로그 데이터베이스에 지정된 카탈로그를 추가합니다. |
/u |
추가된 카탈로그 파일에 대해 고유한 이름이 자동으로 생성되도록 지정합니다. 필요한 경우 기존 카탈로그 파일과의 이름 충돌을 방지하기 위해 카탈로그 파일의 이름을 바꿉니다. 이 옵션을 지정하지 않으면 SignTool은 지정된 카탈로그와 이름이 같은 기존 카탈로그를 덮어씁니다. |
참고 항목
카탈로그 데이터베이스는 카탈로그 파일의 자동 조회에 사용됩니다.
Sign 명령 옵션
다음 표에서는 명령과 함께 사용할 수 있는 옵션을 나열합니다 sign
.
Sign 명령 옵션 | 설명 |
---|---|
/a |
가장 적합한 서명 인증서를 자동으로 선택합니다. SignTool은 지정된 모든 조건을 충족하는 모든 유효한 인증서를 찾고 가장 긴 시간 동안 유효한 인증서를 선택합니다. 이 옵션이 없으면 SignTool은 유효한 서명 인증서를 하나만 찾아야 합니다. |
/ac file |
파일의 다른 인증서를 서명 블록에 추가합니다. |
/as |
이 서명을 추가합니다. 기본 서명이 없으면 이 서명이 대신 기본 서명으로 만들어집니다. |
/c CertTemplateName |
서명 인증서의 인증서 템플릿 이름(Microsoft 확장명)을 지정합니다. |
/csp CSPName |
프라이빗 키 컨테이너를 포함하는 CSP(암호화 서비스 공급자)를 지정합니다. |
/d Desc |
서명된 콘텐츠에 대한 설명을 지정합니다. |
/dg 경로 |
서명할 다이제스트와 서명되지 않은 PKCS7 파일을 생성합니다. 출력 다이제스트 및 PKCS7 파일은 Path\FileName.dig> 및 <Path>\<FileName.p7u>입니다.<>< 추가 XML 파일을 출력하려면 .를 사용합니다 /dxml . |
/di 경로 |
서명되지 않은 PKCS7 파일에 서명된 다이제스트를 수집하여 서명을 만듭니다. 입력 서명된 다이제스트 및 서명되지 않은 PKCS7 파일은 Path>\<FileName.dig.signed> 및 <Path>\<FileName.p7u>여야 합니다<. |
/dlib DLL |
다이제스트에 서명할 함수를 AuthenticodeDigestSign 구현하는 DLL을 지정합니다. 이 옵션은 , /ds 및 옵션과 /di 함께 SignTool을 /dg 별도로 사용하는 것과 같습니다. 이 옵션은 세 가지를 모두 하나의 원자성 연산으로 호출합니다. |
/dmdf 파일 |
이 옵션과 함께 /dg 사용하면 파일의 내용을 수정하지 않고 함수에 AuthenticodeDigestSign 전달합니다. |
/ds |
다이제스트에만 서명합니다. 입력 파일은 옵션에서 생성된 다이제스트 /dg 여야 합니다. 출력 파일은 File.signed>입니다<. |
/du URL |
서명한 콘텐츠의 부연 설명에 대한 URL(Uniform Resource Locator)을 지정합니다. |
/dxml |
이 옵션과 함께 /dg 사용하면 XML 파일을 생성합니다. 출력 파일은 <Path>\<FileName>.dig.xml입니다. |
/f SignCertFile |
파일에 있는 서명 인증서를 지정합니다. 파일이 PFX(개인 정보 교환) 형식이면서 암호로 보호되는 경우, /p 옵션을 사용하여 암호를 지정합니다. 파일에 프라이빗 키가 없는 경우 해당 및 /kc 옵션을 사용하여 /csp CSP 및 프라이빗 키 컨테이너 이름을 지정합니다. |
/fd alg |
파일 서명을 만드는 데 사용할 파일 다이제스트 알고리즘을 지정합니다. 참고: 서명하는 /fd 동안 옵션을 지정하지 않으면 명령에서 오류가 발생합니다. |
/fd certHash |
"certHash" 문자열을 지정하면 명령이 서명 인증서에 지정된 알고리즘을 사용합니다. 참고: 서명하는 /fd 동안 옵션을 지정하지 않으면 명령에서 오류가 발생합니다. |
/i IssuerName |
서명 인증서의 발급자 이름을 지정합니다. 이 값은 발급자의 전체 이름에서 부분 문자열이 될 수 있습니다. |
/kc PrivKeyContainerName |
프라이빗 키 컨테이너 이름을 지정합니다. |
/n SubjectName |
서명 인증서의 주체 이름을 지정합니다. 이 값은 주체의 전체 이름에서 부분 문자열이 될 수 있습니다. |
/nph |
지원되는 경우 실행 파일에 대한 페이지 해시를 억제합니다. 기본값은 SIGNTOOL_PAGE_HASHES 환경 변수 및 wintrust.dll 버전에 의해 결정됩니다. PE 파일이 아닌 경우 이 옵션이 무시됩니다. |
/p Password |
PFX 파일을 열 때 사용할 암호를 지정합니다. 이 /f 옵션을 사용하여 PFX 파일을 지정합니다. |
/p7 경로 |
지정된 각 콘텐츠 파일에 대한 PKCS(공개 키 암호화 표준) #7 파일이 생성되도록 지정합니다. PKCS #7 파일의 이름은 <path>\<filename.p7>입니다. |
/p7ce Value |
서명된 PKCS #7 콘텐츠에 대한 옵션을 지정합니다. PKCS #7 파일에 서명된 콘텐츠를 포함하거나 분리된 PKCS #7 파일의 서명된 데이터 부분을 생성하도록 DetachedSignedData 값을 Embedded 설정합니다. /p7ce 옵션을 지정하지 않으면 서명된 콘텐츠가 기본적으로 포함됩니다. |
/p7co <OID> |
서명된 PKCS #7 콘텐츠를 식별하는 OID(개체 식별자)를 지정합니다. |
/ph |
지원되지 않는 경우 실행 파일에 대한 페이지 해시를 생성합니다. |
/r RootSubjectName |
서명 인증서와 연결해야 하는 루트 인증서의 주체 이름을 지정합니다. 이 값은 루트 인증서 주체의 전체 이름에서 부분 문자열이 될 수 있습니다. |
/s StoreName |
명령이 인증서를 검색할 때 열 저장소를 지정합니다. 이 옵션을 지정하지 않으면 명령이 저장소를 My 엽니다. |
/sha1 Hash |
서명 인증서의 SHA1 해시를 지정합니다. SHA1 해시는 여러 인증서가 나머지 옵션에 지정된 조건을 충족하는 경우에 일반적으로 사용됩니다. |
/sm |
명령이 사용자 저장소 대신 머신 저장소를 사용하게 지정합니다. |
/t URL |
타임스탬프 서버의 URL을 지정합니다. 이 옵션을 지정하거나 /tr 지정하지 않으면 서명된 파일은 타임스탬프를 지정하지 않습니다. 타임스탬핑이 실패하면 명령에서 경고를 생성합니다. 이 옵션은 옵션과 함께 /tr 사용할 수 없습니다. |
/td alg |
/tr 옵션을 사용하여 RFC 3161 타임스탬프 서버에서 사용하는 다이제스트 알고리즘을 요청합니다. 참고: 타임스탬프를 지정하는 동안 지정하지 않으면 /td 명령에서 오류가 발생합니다. |
/tr URL |
RFC 3161 타임스탬프 서버의 URL을 지정합니다. 이 옵션을 지정하거나 /t 지정하지 않으면 서명된 파일은 타임스탬프를 지정하지 않습니다. 타임스탬핑이 실패하면 명령에서 경고를 생성합니다. 이 옵션은 옵션과 함께 /t 사용할 수 없습니다. |
/u Usage |
EKU(확장된 키 사용)가 서명 인증서에 있도록 지정합니다. 용도 값은 OID 또는 문자열로 지정될 수 있습니다. 기본 사용량은 Code Signing or 1.3.6.1.5.5.7.3.3 . |
/uw |
또는 1.3.6.1.4.1.311.10.3.6 .의 Windows System Component Verification 사용량을 지정합니다. |
사용 예제는 SignTool을 사용하여 파일에 서명을 참조하세요.
타임스탬프 명령 옵션
다음 표에서는 명령과 함께 사용할 수 있는 옵션을 나열합니다 timestamp
.
타임스탬프 옵션 | 설명 |
---|---|
/p7 |
파일에 PKCS #7 타임스탬프를 기록합니다. |
/t URL |
타임스탬프 서버의 URL을 지정합니다. 타임스탬프가 기록되는 파일은 이전에 서명되었어야 합니다. /t 또는 /tr 옵션이 필요합니다. |
/td alg |
/tr 옵션을 사용하여 RFC 3161 타임스탬프 서버에서 사용하는 다이제스트 알고리즘을 요청합니다. 참고: 타임스탬프를 지정하는 동안 지정되지 않은 경우 /td 명령은 경고를 생성합니다. |
/tp index |
index에서 시그니처에 타임스탬프를 지정합니다. |
/tr URL |
RFC 3161 타임스탬프 서버의 URL을 지정합니다. 타임스탬프가 기록되는 파일은 이전에 서명되었어야 합니다. /tr 또는 /t 옵션이 필요합니다. |
명령 옵션 확인
다음 표에서는 명령과 함께 사용할 수 있는 옵션을 나열합니다 verify
.
옵션 확인 | 설명 |
---|---|
/a |
모든 메서드를 사용하여 파일을 확인할 수 있도록 지정합니다. 먼저 SignTool은 카탈로그 데이터베이스를 검색하여 파일이 카탈로그에 로그인되어 있는지 여부를 확인합니다. 파일이 카탈로그에 서명되지 않은 경우 SignTool은 파일의 포함된 서명을 확인하려고 시도합니다. 카탈로그에서 서명되거나 서명되지 않을 수 있는 파일을 확인할 때 이 옵션을 사용하는 것이 좋습니다. 서명되거나 서명되지 않을 수 있는 파일의 예로는 Windows 파일 또는 드라이버가 포함됩니다. |
/ad |
기본 카탈로그 데이터베이스를 사용하여 카탈로그를 찾습니다. |
/all |
여러 서명이 있는 파일의 모든 서명을 확인합니다. |
/as |
시스템 구성 요소(드라이버) 카탈로그 데이터베이스를 사용하여 해당 카탈로그를 찾습니다. |
/ag CatDBGUID |
GUID로 식별된 카탈로그 데이터베이스에서 카탈로그를 찾습니다. |
/c CatFile |
이름별로 카탈로그 파일을 지정합니다. |
/d |
설명 및 설명 URL을 인쇄합니다. Windows Vista 및 이전 버전: 이 옵션은 지원되지 않습니다. |
/ds Index |
특정 위치에서 서명을 확인합니다. |
/hash {SHA1|SHA256} |
카탈로그에서 파일을 검색할 때 사용할 선택적 해시 알고리즘을 지정합니다. |
/kp |
x64 커널 모드 드라이버 서명 정책을 사용하여 확인을 수행합니다. |
/ms |
여러 확인 의미 체계를 사용합니다. 이 동작은 WinVerifyTrust 호출의 기본값입니다. |
/o Version |
운영 체제 버전별로 파일을 확인합니다. 버전 매개 변수는 PlatformID>:<VerMajor> 형식<입니다.<VerMinor>.<BuildNumber>. 옵션을 사용하는 /o 것이 좋습니다. 지정하지 않으면 /o SignTool에서 예기치 않은 결과를 반환할 수 있습니다. 예를 들어 포함하지 /o 않는 경우 이전 운영 체제에서 올바르게 유효성을 검사하는 시스템 카탈로그가 최신 운영 체제에서 올바르게 유효성을 검사하지 못할 수 있습니다. |
/p7 |
PKCS #7 파일을 확인합니다. PKCS #7 유효성 검사에 기존 정책이 사용되지 않습니다. SignTool은 서명을 확인하고 서명 인증서에 대한 체인을 빌드합니다. |
/pa |
기본 인증 확인 정책이 사용되도록 지정합니다. /pa 옵션을 지정하지 않으면 SignTool은 Windows 드라이버 확인 정책을 사용합니다. 이 옵션은 옵션과 함께 catdb 사용할 수 없습니다. |
/pg PolicyGUID |
GUID를 기준으로 확인 정책을 지정합니다. GUID는 확인 정책의 GUID에 해당 ActionID 합니다. 이 옵션은 옵션과 함께 catdb 사용할 수 없습니다. |
/ph |
페이지 해시 값을 인쇄하고 확인합니다. Windows Vista 및 이전 버전: 이 옵션은 지원되지 않습니다. |
/r RootSubjectName |
서명 인증서와 연결해야 하는 루트 인증서의 주체 이름을 지정합니다. 이 값은 루트 인증서 주체의 전체 이름에서 부분 문자열이 될 수 있습니다. |
/tw |
서명에 타임스탬프를 지정하지 않으면 명령이 경고를 생성하게 지정합니다. |
SignTool verify
명령은 신뢰할 수 있는 기관에서 서명 인증서를 발급했는지 여부, 서명 인증서가 해지되었는지 여부 및 필요에 따라 서명 인증서가 특정 정책에 유효한지 여부를 결정합니다.
SignTool verify
명령은 카탈로그(예: /a
, /ad
, /as
/ag
또는 /c
.)를 검색하는 옵션을 지정하지 않는 한 포함된 서명 상태를 출력합니다.
반환 값
SignTool은 종료 시 다음 종료 코드 중 하나를 반환합니다.
종료 코드 | 설명 |
---|---|
0 |
실행이 완료되었습니다. |
1 |
실행하지 못했습니다. |
2 |
실행이 경고와 함께 완료되었습니다. |
예
다음 명령은 시스템 구성 요소 및 드라이버 데이터베이스에 카탈로그 파일 MyCatalogFileName.cat 추가합니다. 이 /u
옵션은 필요한 경우 MyCatalogFileName.cat 명명된 기존 카탈로그 파일을 교체하지 않도록 고유한 이름을 생성합니다.
signtool catdb /v /u MyCatalogFileName.cat
다음 명령은 가장 적합한 인증서를 사용하여 파일에 자동으로 서명합니다.
signtool sign /a /fd SHA256 MyFile.exe
다음 명령은 암호로 보호된 PFX 파일에 저장된 인증서를 사용하여 파일에 디지털 서명을 합니다.
signtool sign /f MyCert.pfx /p MyPassword /fd SHA256 MyFile.exe
다음 명령은 파일을 디지털 서명하고 타임스탬프를 지정합니다. 파일에 서명하는 데 사용할 인증서는 PFX 파일로 저장됩니다.
signtool sign /f MyCert.pfx /t http://timestamp.digicert.com /fd SHA256 MyFile.exe
다음 명령은 My
의 주체 이름이 있는 My Company Certificate
저장소에 위치한 인증서를 사용하여 파일에 서명합니다.
signtool sign /n "My Company Certificate" /fd SHA256 MyFile.exe
다음 명령은 ActiveX 컨트롤에 서명하고 사용자에게 컨트롤을 설치하라는 메시지가 표시되면 브라우저에 표시되는 정보를 제공합니다.
signtool sign /f MyCert.pfx /d: "MyControl" /du http://www.example.com/MyControl/info.html /fd SHA256 MyControl.exe
다음 명령은 이미 디지털 서명된 파일을 타임스탬프를 지정합니다.
signtool timestamp /t http://timestamp.digicert.com MyFile.exe
다음 명령은 RFC 3161 타임스탬프를 사용하여 파일을 타임스탬프를 지정합니다.
signtool timestamp /tr http://timestamp.digicert.com /td SHA256 MyFile.exe
다음 명령은 파일이 서명되었는지를 확인합니다.
signtool verify MyFile.exe
다음 명령은 카탈로그에 서명할 수 있는 시스템 파일을 확인합니다.
signtool verify /a SystemFile.dll
다음 명령은 이름이 지정된 MyCatalog.cat
카탈로그에 서명된 시스템 파일을 확인합니다.
signtool verify /c MyCatalog.cat SystemFile.dll