코드사이닝 자동화

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

비스타 운영체제가 실행 가능한 파일 포맷(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

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

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=%1set 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

singcode.exe 옵션

OptionsParameter설 명
-spcFileSPC를 포함하는 파일명
-vPvkFile비밀키를 포함하고 있는 파일명
-kKeyName레지스트리 내의 키 이름
-nName사인할 내용에 대한 텍스트 이름
-IInfo사인할 내용에 대한 부가 설명이 있는 장소(예:URL)
-pProvider시스템내의 암호화 시스템 제공자 이름
-yType시스템내의 암호화 시스템 제공자 형태
kykeytype키의 종류. (signature|exchange|(정수)) 중 하나
-$authority인증서를 인증한 기관의 종류. (individual|commercial) 중 하나
-aalgorithm사인에 이용된 해쉬 알고리즘. (md5|sha1) 중 하나. MD5가 기본
-tURLTimestamp를 찍어줄 서버의 HTTP 주소
-trNumberTimestamp 서버 접속 실패시 재 시도 횟수. 기본은 1회
-twNumberTimestamp간 간격(초단위). 기본은 0초
-jDllName사인에 필요한 부가 특성들을 포함하는 DLL 파일명 (예:보안 레벨)
-jpParamDLL 파일에 넘길 Parameter
-cFile인코딩된 SPC를 포함한 X.509 파일명
-sStore인증서를 가지고 잇는 인증서 보관소(Store)명. 기본은 my store.
-rLocation레지스트리 내의 인증서 보관소의 위치. (localMachine|currentUser)중 하나. 기본은 currentUser
-spPolicy인증서 검증에 필요한 모든 인증서를 포함할 것인가 아니면 SPC 보관소(Store)에 들어있는 인증서가 나올 때까지 포함할 것인가에 대한 정책. (chain|spcstore) 중 하나. 기본은 spcstore
-cnName인증서의 일반 이름(별명)
-x.싸인하지 말고 Timestamp만 받을것을 명시

명령어

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

레퍼런스

by stein | 2008/03/27 13:23 | Windows Programing | 트랙백 | 핑백(1) | 덧글(1)

트랙백 주소 : http://dstein.egloos.com/tb/1816009
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at S2 & NAMU : .. at 2009/09/28 15:10

... bsp; 주는 프로그램 입니다. [출처] http://dstein.egloos.com/1816009 ex)1) Cabinet Archive를 생성cabarc.exe N VrsUploadProj ... more

Commented by 정창용 at 2009/06/19 16:07
자동화 관련한 키워드로 블로그를 방문했다가 제가 Uniqki에서 작성했던 문서가 있는것을 보고 깜짝 놀랐습니다. ^^ 라이센스 운운하는건 아닙니다. 전 copyleft 주의자라서. 이렇게 스크랩 해주셔서 감사하다고 말씀드리려고 글남겨봅니다. HanRSS 등록해두고 감시(?)하면서 종종 들르겠습니다. 건승하십시오. ^^

ps: 본문의 url의 domain은 현재 블로그 테스트용으로 네임서버를 변경해서 파일다운로드는 정상적으로 안되실겁니다. :)

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶