코드사이닝 자동화

출처 : http://aego.pe.kr/AutomateCodeSigning.html#toc1

비스타 운영체제가 실행 가능한 파일 포맷(PE:.exe, .dll, .ocx)들의 코드사이닝을 강제(사용자입장에서 웬지 꺼림칙하게 느끼게)하기 시작하면서 어쩔 수 없이 기존의 배포했던 프로그램의 실행파일을 코드사이닝 처리해야 하게 되었다. 한 두개의 파일 코드사이닝이야 .bat 파일을 만들어서 하거나 아니면 직접 커맨드라인에서 signcode.exe 위저드를 통해서 처리해버려도 되지만 수백개에 달하는 파일을 처리해야 되는 경우라면 아주 짜증나는 노가다성 작업이 되버리고 만다. 하여 어떻게 하면 자동화 시킬 수 있을까라는 생각에 현재 사용하고 있는 .bat 파일을 열어서 보니 다음과 같이 처리하고 있다.

signcode -v mykey.pvk -spc mycert.spc -n "MyProgram"  -t 
     http://timestamp.verisign.com/scripts/timstamp.dll KVLauncher.exe
setreg -q 1 TRUE
chktrust KVLauncher.exe

이렇게 하게 되는 경우 프로그램적으로 자동화 시키는데 한가지 걸림돌이 생긴다. 바로 발급받은 키 서명시 필요한 개인키 암호입력 대화상자이다.

커맨드 대화상자에서 팝업되는 대화상자를 어떻게 접근해야 되려나 고민하면서 인터넷을 뒤지던 중 역시나 내가 고민하던 문제를 먼저 고민하고 해결하여 고맙게도 무료로 유틸리티를 배포하는 곳(http://www.stephan-brenner.com/?page_id=9)을 발견하였다.이 유틸리티를 이용하면 개발 IDE툴의 post-build 옵션으로 개발중인 프로그램의 코드사이닝 처리도 자동화 시킬 수 있다.

그럼 이 sign-pwd 툴의 사용방법을 알아보도록 하자. 이 프로그램은 command-line 툴이다. 다음과 같은 옵션들을 가지고 있다.

post-build

자 이제 툴의 사용법도 대충 보았고 실제로 코드사이닝을 시키는 예제를 통해서 사용방법을 완전히 익혀보도록 하자. CodeSingSampleDlg.exe라는 Dialog-base 프로그램을 하나 만들고 그 결과물을 코드사이닝 할 것이다.

프로젝트의 post-build 옵션을 위와 같이 설정해주면 암호 입력 대화상자의 입력폼을 미리 입력해둔 암호로 자동 입력하고 계속 진행되도록 해준다.

signcode-pwd.exe -m password
signcode.exe -v mykey.pvk -spc mycert.spc -n "MyProgram"  -t 
     http://timestamp.verisign.com/scripts/timstamp.dll CodeSignSampleDlg.exe
setreg -q 1 TRUE
signcode-pwd.exe -t[/CODE]

output창을 보면 정상적으로 코드사이닝 된것을 알 수 있다.

[CODE]Monitoring process successfully started
Succeeded
Monitoring process successfully terminated

.bat

배포되는 프로그램의 압축 파일을 풀어보면 .bat파일을 이용한 코드사이닝 자동화 방법을 예로 보여주고 있다. TODO로 명시하고 있는 부분을 상황에 맞게 적절히 수정하고 sign-pwd.exe를 통해서 pwd 파일을 생성하여 위치를 연결시켜주기만 하면 된다. 사용법은 xxx.bat CodeSingSampleDlg.exe 식으로 사용해주면 된다. 하나 이상의 파일을 코드사이닝 처리해야 하는 경우 정도가 활용예라고 할 수 있을 것이다.

@echo off
rem ----------------------------------------
rem TODO: Modify this constants before using
rem ----------------------------------------
set strFile=%1
set strSignCode=c:\CodeSigning\signcode.exe
set strSignCodePwd=C:\CodeSigning\signcode-pwd.exe
set strSpc=c:\CodeSigning\myCredentials.spc
set strPvk=c:\CodeSigning\myPrivateKey.pvk
set strPwd=c:\CodeSigning\myPassword.pwd
set tsUrl= http://timestamp.verisign.com/scripts/timstamp.dll

echo Start signcode-pwd.exe
%strSignCodePwd% -f %strPwd%

echo Execute signcode.exe
%strSignCode% %strFile% -spc %strSpc% -v %strPvk% -t %tsUrl%
if errorlevel 0 goto end_success

:end_error
echo Error occured while signing
%strSignCodePwd% -t
exit 1

:end_success
echo Signing was successfull
%strSignCodePwd% -t

명령어

  • CabArc.exe: Cabinet Archive를 생성해 주는 프로그램. 애플릿 클래스 파일들을 Cabinet 파일로 만들어 줍니다.
  • SignCode.exe: Cabinet 파일을 비밀키와 인증서로 싸인해 줍니다.
  • ChkTrust.exe: 싸인 작업이 잘 수행되었는가 검증해 주는 프로그램 입니다.
  • MakeCert.exe: 시험용 인증서를 만들어 주는 프로그램 입니다.
  • Cert2Spc: MakeCert로 만들어진 시험용 인증서를 사인하는 작업에 사용될 수 있도록 변환해 주는 프로그램 입니다.
  • Javasign.dll: 사인작업시 필요한 정보를 지정해 주는데에 사용되는 프로그램 입니다.

signcode_pwd_1_02.zip

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다