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 명령 옵션을 참조 하세요. |
remove |
파일에서 서명을 제거합니다. 명령에서 지원하는 옵션 목록은 명령 옵션 제거를 remove 참조 하세요. |
sign |
파일에 디지털 서명을 수행합니다. 디지털 서명은 파일이 변조되지 않도록 보호하고 사용자가 서명 인증서를 기반으로 서명자를 확인할 수 있도록 합니다. 명령에서 지원하는 sign 옵션 목록은 서명 명령 옵션을 참조 하세요. |
timestamp |
타임스탬프를 지정합니다. 명령에서 지원하는 timestamp 옵션 목록은 타임스탬프 명령 옵션을 참조 하세요. |
verify |
파일의 디지털 서명을 확인합니다. 신뢰할 수 있는 기관에서 서명 인증서를 발급했는지 여부, 서명 인증서가 해지되었는지 여부 및 필요에 따라 서명 인증서가 특정 정책에 유효한지 여부를 결정합니다. 명령에서 지원하는 verify 옵션 목록은 명령 확인 옵션을 참조 하세요. |
다음 옵션은 모든 SignTool 명령에 적용됩니다.
전역 옵션 | 설명 |
---|---|
/q |
명령이 성공적으로 실행되는 경우 출력을 표시하지 않고, 명령이 실패하는 경우 최소 출력을 표시합니다. |
/v |
명령이 성공적으로 실행되는지 또는 실패하는지 여부와 상관없이 자세한 정보 출력을 표시하고 경고 메시지를 표시합니다. |
/debug |
디버깅 정보를 표시합니다. |
Catdb 명령 옵션
다음 표에서는 명령과 함께 사용할 수 있는 옵션을 나열합니다 catdb
.
Catdb 옵션 | 설명 |
---|---|
/d |
기본 카탈로그 데이터베이스가 업데이트되도록 지정합니다. 사용하지 않는 /d /g 경우 SignTool은 시스템 구성 요소 및 드라이버 데이터베이스를 업데이트합니다. |
/g GUID |
GUID로 식별된 카탈로그 데이터베이스가 업데이트되도록 지정합니다. |
/r |
카탈로그 데이터베이스에서 지정된 카탈로그를 제거합니다. 이 옵션을 지정하지 않으면 SignTool은 카탈로그 데이터베이스에 지정된 카탈로그를 추가합니다. |
/u |
추가된 카탈로그 파일에 대해 고유한 이름이 자동으로 생성되도록 지정합니다. 필요한 경우 기존 카탈로그 파일과의 이름 충돌을 방지하기 위해 카탈로그 파일의 이름을 바꿉니다. 이 옵션을 지정하지 않으면 SignTool은 지정된 카탈로그와 이름이 같은 기존 카탈로그를 덮어씁니다. |
참고 항목
카탈로그 데이터베이스는 카탈로그 파일의 자동 조회에 사용됩니다.
명령 옵션 제거
다음 표에서는 명령과 함께 사용할 수 있는 옵션을 나열합니다 remove
.
제거 옵션 | 설명 |
---|---|
/c |
서명에서 서명자 인증서를 제외한 모든 인증서를 제거합니다. |
/q |
성공에 대한 출력이 없고 실패에 대한 최소 출력이 없습니다. 언제나처럼 SignTool은 성공 및 1 실패 시 반환 0 됩니다. |
/s |
서명을 완전히 제거합니다. |
/u |
서명에서 인증되지 않은 특성(예: 이중 서명 및 타임스탬프)을 제거합니다. |
/v |
자세한 정보 표시 성공 및 상태 메시지를 인쇄합니다. 오류에 대한 자세한 정보를 제공할 수도 있습니다. |
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
다음 명령은 파일에서 서명을 완전히 제거합니다.
signtool remove /s MyFile.exe