본문 바로가기
프로그래밍/C++

[펌 ]Active X 캐비닛 파일 생성과 디지털 서명하기

by 건우아빠유리남편 2010. 3. 15.
반응형

출처 tochiro의 따끈한 마음 | tochiro
원문 http://blog.naver.com/tochiro/4840967

ActiveX를 등록하는데 어려움을 경험해 본 사람은 정말 힘든 작업이 될것입니다.
특히 VC++인경우 만들어 놓고도 사용을 하기까지는 험난한 길을 걸어야한?

아래의 글을 참조하여 만들어 보기를 바란다.
필요한 파일을 올립니다.
명령은 도스모드에서 실행하시면 됩니다.

ActiveX Control을 만들어서 웹페이지에 올리기 위해서는 반드시 Code Sign을 해야한다. Code Sign에 대해서는 MS 측에서도 할 말이 참 많은 모양이다. MSDN에서 찾아보면 장황하게도 많은 설명이 나와있다. 간단히 말해 Code Sign은 보안문제 때문에 필요한 작업이다.웹페이지에 올려진 Control은 Client의 시스템에 설치된 후 실행되기 때문에 항상 위험성을 내포하고 있다. 따라서 Internet Explorer는 Control을 다운로드 받을때 Control이 디지털 서명(Digital Signature)을 가지고 있는지를 검사한다. 디지털 서명이란 해당 Control을 제작한 회사를 나타내는 바이트 문자열이다. 또한 Control은 디지털 서명을 확인할 수 있도록 보안증(Certificate)이라고 하는 또 다른 바이트 문자열을 제공해야 한다. 본 예제에서는 필요한 파일을 CAB 파일로 패키징 한후 CAB파일에 디지털 서명을 추가할 것이다.

수행할 작업은 크게 다음의 4단계로 구분된다.

SPC(Software Publisher Certificate) 생성
CAB 파일 생성
CAB 파일에 디지털 서명 추가
웹페이지에 CAB 파일 추가
작업을 수행하기 위해서는 물론 도구(Internet Client SDK)가 필요하다. 이 SDK는 크게 IE 4.0용과 IE 5.0용의 두가지가 있다. 본 예제에서는 IE 5.0 버전용 SDK를 사용할 것이다. SDK 전체를 다운로드 받기 위해서는 MS사의 FTP(ftp.microsoft.com)을 방문하면 될 것이고, 본 예제를 수행하기 위해 필요한 최소 파일들은 바로 다운로드 받을 수 있도록 해 놓았다. 참고로 첨부된 ATL.DLL은 ANSI 버전이며 운영체제로 Windows NT 버전을 사용하는 독자는 CAB 파일을 생성할 때 독자의 System32 폴더에 있는 ATL.DLL을 사용하지 말고 반드시 첨부된 ATL.DLL을 사용하길 바란다. Window NT에는 UNICODE 버전의 ATL.DLL이 포함되어 있는데, Windows 9x 계열 사용자는 UNICODE 버전의 ATL.DLL을 실행시킬 수 없기 때문이다

그럼 이제 하나씩 시작해보도록 하자. 노파심에 하는 얘기지만 당연히 Release 모드로 컴파일한 DLL 파일을 사용해야 한다. 기껏 MFC를 사용하지 않고 ATL을 사용했으면서 Debug 모드로 컴파일한 DLL을 쓰는 것은...??? 알아서들 생각하시길...^^;

SPC 생성


Control에 디지털 서명을 추가하기 위해서는 SPC를 얻어야 한다. 만약 상업용으로 SPC를 얻고자 한다면 Verisign과 같은 인증회사에 적정한 비용을 지불 해야할 것이다. 본 예제에서 만들 Control은 학습을 위한 Control이므로 테스트용 SPC를 생성하여 사용할 것이다. 테스트용 SPC를 생성하기 위해서는 DOS Prompt 상에서 다음 과정을 수행한다.

1. 보증확인 과정을 제어하기 위해 Registry Key를 생성한다.

SETREG 1 TRUE

위의 명령을 입력하면 화면상에 알아듣지 못할 메시지들이 출력된다. 에러메시지만 아니면 OK다. 그러려니 하고 넘어가도록 하자...-_-;

2. 테스트용 X.509 보증서를 생성한다.

MAKECERT -n "CN=MyCertificate" -sv Test.pvk Test.cer

위의 명령은 Test.pvk라는 Private Key 파일과 Test.cer이라는 보증서를 생성한다. 정상적으로 처리가 되었다면 다음과 같이 암호를 설정하라는 창이 뜬다. 독자 임의대로 암호를 입력하도록 하자.




암호를 설정하면 다시 한번 암호를 묻는 창이 뜬다. 위에서 지정한 암호를 입력하도록 하자.





3. 테스트용 보증서에서 테스트용 SPC를 생성한다.

CERT2SPC Test.cer Test.spc

위의 명령은 Test.cer에서 Test.spc라는 테스트용 SPC 파일을 생성한다.

CAB 파일 생성

CAB 파일을 생성하기에 앞서 먼저 INF 파일을 만들어야 한다. INF 파일에는 Control과 함께 클라이언트측으로 다운로드 되어야 하는 파일들에 대한 정보가 저장된다. 텍스트 에디터를 이용해서 만들면 된다.

1. INF 파일 생성

; INF file for AtlGL.DLL
[version]
; version signature(same for both NT and Win95) do not remove
signature="$CHICAGO$"
AdvancedINF=2.0

[Add.Code]
AtlGL.dll=AtlGL.dll
atl.dll=atl.dll

; needed DLL
[atl.dll]
file-win32-x86=thiscab
FileVersion=3,0,8449,0
DestDir=11
RegisterServer=yes

[AtlGL.dll]
file-win32-x86=thiscab
clsid={FE156D1A-E860-4D2D-8839-266DFBF7394A}
FileVersion=1,0,0,1
RegisterServer=yes
; end of INF file

이 INF 파일에는 atl.dll과 AtlGL.dll 두 개의 파일이 CAB 파일에 있다는 것을 나타낸다. file-win32-x86 예약어는 x86 플랫폼을 의미하며, thiscab 예약어는 Client가 이 INF 파일을 포함하는 CAB 파일에서 필요한 파일들을 다운로드한다는 의미이다. 만약 다른 URL로부터 다운로드되어야 한다면 file-win32-x86= http://www.mysite.com/mydir/needed.dll 과 같이 쓸 수 있다.
FileVersion 예약어는 해당 파일의 버전 번호가 지정되며, 버전 번호는 해당 파일의 등록정보에서 확인할 수 있다.
DestDir 예약어는 해당 파일이 다운로드 될 Client 측의 경로명을 지정한다. 11은 시스템 폴더(WINDOWSSYSTEM 또는 WINNT32SYSTEM32)임을 나타내고, 10은 윈도우 폴더(WINDOWS 또는 WINNT32)를 의미한다. 아무것도 지정이 되지 않은 경우에는 OCCACHE 폴더에 저장된다.
clsid 예약어는 해당 컨트롤의 CLSID가 지정되며, RegisterServer 예약어는 레지스트리에 등록 여부를 지정한다.



CLSID란???
Class Identifier로서 COM 개체를 식별하는데 사용되는 GUID 값이다. 그렇다면 GUID란 또 무엇인가? GUID(Globally Unique Identifier)란 128비트의 크기를 갖는 구조체로서 전세계적으로 시간과 장소에 관계없이 고유하다고 보장할 수 있는 어떤 값을 나타내는 식별자로 사용된다. UUID(Uinversally Unique Identifier)라고도 한다. COM에서 Interface와 개체의 고유성을 보장하기 위해 사용되는 값이라고 알아두자. 더욱 자세한 내용을 알고 싶은 독자는 COM 관련 서적이나 MSDN을 참고하길 하란다.



2. CAB 파일 생성

CABARC -s 6144 n AtlGL.cab atl.dll AtlGL.dll AtlGL.inf

INF 파일을 작성하였다면 위의 명령으로 CABARC 유틸리티를 사용하여 CAB 파일을 만들 수 있다.

디지털 서명 추가

SIGNCODE -spc Test.spc -v Test.pvk -n "AtlGL" AtlGL.cab

CAB 파일까지 정상적으로 만들어졌다면 위의 명령으로 CAB 파일에 디지털 서명을 추가한다. 명령을 실행하면 다음 그림과 같이 암호를 묻는 창이 뜨는데, SPC를 만드는 과정에서 설정한 암호를 입력하면 된다. 참고로, CAB 파일을 사용하지 않고 DLL이나 OCX 파일에 직접 디지털 서명을 추가할 수도 있다고 한다.



웹페이지에 CAB 파일 추가

자 이제 서명이 끝난 Control을 실제로 웹페이지에서 보이도록 해보자. 다음과 같이 웹페이지에 [OBJECT] 태그의 CODEBASE 속성에 CAB 파일이 있는 URL을 지정하도록 한다.(컴파일하면 기본적으로 만들어지는 AtlGL.htm 파일을 참고하도록 한다.)

CODEBASE="AtlGL.cab#version=1,0,0,1">


이렇게 만들어진 html 파일과 cab파일을 여러분의 계정에 복사해 넣은 후 직접 테스트해보길 바란다. 이미 여러분의 레지스트리에는 컴파일 과정에서 Control이 등록되어 있기 때문에 테스트를 하기 전에 꼭 레지스트리 등록을 해제하길 바란다.

REGSVR32 atlgl.dll -U

위와 같이 DOS Prompt 상에서 입력하면 될 것이다.

이상으로 속 빈 강정같은 글을 모두 마치려한다. 다시 한번 부끄러운 마음이 앞서지만 그래도 필자보다 더 초보자에게 조금이나마 도움이 된다면 더 이상 바랄 것이 없겠다. 지금까지 설명한 내용은 OpenGL을 사용하기 위한 기초일 뿐이다. 실제로 이 Control이 어떤 기능을 가지느냐는 여러분의 몫일 것이다. 모두들 열심히 해서 훌륭한 기능의 Control들을 많이 만들기 바란다. 다음에 기회가 된다면 이렇게 만든 OpenGL Control을 어느 분야에 어떻게 적용시킬 수 있는지 직접 예를 들어 설명하는 글을 써보고 싶지만, 필자 역시 경험이 턱없이 부족한 학생인지라 그 때가 언제일지는 기약하기 힘들 것 같아서 아쉬운 마음이 남는다.

마지막으로 Code Sign을 설명한 부분은 전병선씨의 Visual C++ ATL COM Programming이라는 책을 상당부분 인용했음을 밝힌다. 
 
반응형

댓글