signtool ksp와 Windows KSP 통합
signtool ksp는 Windows sslTrus Key Storage Provider(KSP)를 관리합니다. KSP 설치 및 구성이 완료되면 Microsoft signtool.exe이(가) CNG Provider를 통해 원격 서명 서비스를 호출할 수 있어, 로컬에 개인 키를 보관할 필요가 없습니다.
signtool ksp의 모든 하위 명령은 Windows 플랫폼만 지원합니다. Windows가 아닌 플랫폼에서 임의의 ksp 하위 명령을 실행하면 다음이 반환됩니다:
key storage provider is only supported on windows
하위 명령 개요
signtool ksp [command]
| 하위 명령 | 용도 |
|---|---|
install | KSP DLL 설치 및 등록 |
uninstall | KSP 등록 해제 후 DLL 삭제 |
list | 저장된 KSP 키 구성 목록 조회 |
add | KSP 키 구성 추가(대화형) |
del | 지정된 KSP 키 구성 삭제(대화형) |
--address 매개변수는 ksp add 시에만 유효하며, 인증서 PEM을 가져오고 원격 서비스 주소를 저장하는 데 사용됩니다.
KSP 설치
signtool ksp install
실행 후:
- 내장된
sslTrusKSP.dll를ProgramData/sslTrusKSP/sslTrusKSP.dll에 씁니다. - ProgramData의 DLL 버전이 System32의 버전과 다를 경우, DLL을 System32로 복사합니다.
- CNG Provider를 등록합니다:
sslTrus Key Storage Provider. - KSP 구성 파일
ProgramData/sslTrusKSP/config.dat을 저장합니다(DPAPI 암호화).
install는 시스템 수준 CNG Provider 등록을 수정하므로 관리자 터미널에서 실행할 것을 권장합니다. DLL 버전이 동일한 것으로 감지되면 ksp is already installed를 기록하고 바로 반환합니다.
KSP 제거
signtool ksp uninstall
실행 후:
- CNG Provider 등록을 해제합니다:
sslTrus Key Storage Provider. ProgramData/sslTrusKSP/sslTrusKSP.dll을(를) 삭제합니다.- System32에서
sslTrusKSP.dll을(를) 삭제합니다.
uninstall은(는) 전체 ProgramData/sslTrusKSP 디렉터리를 삭제하지 않습니다. 저장된 config.dat, 인증서 파일 및 로그는 수동으로 정리해야 합니다.
키 구성 보기
signtool ksp list
출력 필드 설명:
| 필드 | 의미 |
|---|---|
No | 일련번호 |
CertCode | 인증서 번호 |
ServerUrl | nicsrs 또는 default(으)로 표시 |
AccessKey | Access Key |
AccessSecret | 마스킹 처리된 Access Secret |
- 구성 파일이 없는 경우
no ksp configuration을(를) 반환합니다. - 구성이 존재하지만 키 목록이 비어 있는 경우
no ksp key를 기록합니다. AccessSecret는 마스킹하여 표시하지만, 구성 파일 자체는 여전히 민감 파일로 관리해야 합니다.
키 구성 추가
signtool ksp add
NICSRS 주소 지정:
signtool ksp add --address nicsrs
명령은 대화형이며 순서대로 입력하십시오:
Please enter the access key: your-access-key
Please enter the access secret: your-access-secret
Please enter the certificate code: CERT_CODE
실행 후:
- 원격
/v1/codesign/cert를 호출하여 인증서 PEM을 가져옵니다. - 인증서를
ProgramData/sslTrusKSP/CERT_CODE.crt(으)로 저장합니다. - 키 구성을
ProgramData/sslTrusKSP/config.dat에 씁니다(DPAPI 암호화).
인증서 번호가 이미 존재하는 경우 다음과 같이 안내합니다:
The certificate code already exists, do you want to override it? [y/N]
y을(를) 입력하면 덮어쓰며, 다른 값을 입력하거나 그냥 Enter 키를 누르면 취소됩니다.
ksp add은(는) 대화형 명령이며, 현재 --access-key, --cert-code 등 비대화형 매개변수는 지원하지 않습니다. 구성을 추가하면 원격 API에 접근하며, 인증서 PEM을 로컬 ProgramData에 기록합니다.
키 구성 삭제
signtool ksp del
인증서 번호를 대화식으로 입력합니다:
Please enter the certificate code: CERT_CODE
실행 후 config.dat에서 일치하는 키 구성을 삭제하고, 암호화된 구성 파일을 다시 저장합니다.
현재 구현은 구성 항목만 삭제하며, ProgramData/sslTrusKSP/CERT_CODE.crt 인증서 파일은 삭제하지 않습니다.
KSP를 통해 Microsoft signtool.exe 사용
KSP 구성이 완료되면 Windows SDK의 Microsoft signtool.exe를 사용하여 Provider를 호출합니다.
아래 명령의 signtool.exe는 Microsoft Windows SDK에 기본 제공되는 도구이며, sslTrus CLI가 아닙니다. 현재 디렉터리나 PATH에 둘 다 존재하는 경우 혼동을 피하기 위해 Windows SDK 내 signtool.exe의 전체 경로를 사용하시기 바랍니다.
SHA256 서명 예시:
signtool.exe sign /v ^
/csp "sslTrus Key Storage Provider" ^
/kc CERT_CODE ^
/f C:\ProgramData\sslTrusKSP\CERT_CODE.crt ^
/fd SHA256 ^
/tr http://timestamp.acs.microsoft.com ^
/td SHA256 ^
.\EXAMPLE.exe
SHA1 서명 추가 예시:
signtool.exe sign /v ^
/csp "sslTrus Key Storage Provider" ^
/kc CERT_CODE ^
/f C:\ProgramData\sslTrusKSP\CERT_CODE.crt ^
/fd SHA1 ^
/tr http://timestamp.acs.microsoft.com ^
/td SHA256 ^
/as ^
.\EXAMPLE.exe
매개변수 설명:
| 매개변수 | 의미 |
|---|---|
/csp "sslTrus Key Storage Provider" | sslTrus가 설치한 KSP Provider를 지정합니다 |
/kc CERT_CODE | KSP 키 이름을 지정하며, 인증서 번호로 약정됩니다 |
/f C:\ProgramData\sslTrusKSP\CERT_CODE.crt | ksp add에 저장된 인증서 파일을 지정합니다 |
/fd SHA256 또는 /fd SHA1 | 파일 다이제스트 알고리즘 |
/tr <url> | RFC3161 타임스탬프 서비스 |
/td SHA256 | 타임스탬프 다이제스트 알고리즘 |
/as | 서명을 추가하며 기존 서명을 덮어쓰지 않습니다. |
트러블슈팅 참고
| 오류 메시지 | 가능한 원인 | 처리 권장 사항 |
|---|---|---|
key storage provider is only supported on windows | Windows가 아닌 플랫폼에서 ksp 명령을 실행했습니다. | Windows에서만 KSP 작업을 실행하십시오. |
no ksp configuration | KSP 구성 파일이 아직 생성되지 않았습니다. | 먼저 signtool ksp install 및 signtool ksp add를 실행하십시오. |
no such certificate code | 삭제하려는 인증서 번호가 존재하지 않습니다. | signtool ksp list를 사용하여 인증서 번호를 확인하십시오. |
보안 주의 사항
signtool ksp install및signtool ksp uninstall는 Windows 시스템 디렉터리와 CNG Provider 등록 정보를 수정하므로 일반적으로 관리자 권한이 필요합니다.signtool ksp add는 원격 인증서 인터페이스에 접근하며, 인증서 파일과 암호화 구성을ProgramData/sslTrusKSP에 기록합니다.- Access Secret, KSP 구성 파일, 로컬 로그는 모두 민감 정보로 취급해야 하며, 로그나 버전 저장소에 기록하지 마십시오.