Share via


어셈블리 서명 예제

다음 예제에서는 어셈블리 매니페스트, 확인 카탈로그 및 어셈블리 파일로 구성된 서명된 병렬 어셈블리를 생성하는 방법을 설명합니다. 공유 병렬 어셈블리에 서명해야 합니다. 운영 체제는 공유 어셈블리를 전역 병렬 저장소(WinSxS)에 설치하기 전에 어셈블리 서명을 확인합니다. 이렇게 하면 병렬 어셈블리의 게시자를 스푸핑하기가 어렵습니다.

어셈블리 카탈로그를 생성한 후 어셈블리 파일 또는 매니페스트의 내용을 변경하면 카탈로그와 어셈블리가 무효화됩니다. 카탈로그를 만들고 서명한 후 어셈블리 파일 또는 매니페스트를 업데이트해야 하는 경우 어셈블리에 다시 서명하고 새 카탈로그를 생성해야 합니다.

어셈블리 파일, 어셈블리 매니페스트 및 어셈블리 서명에 사용할 인증서 파일로 시작합니다. 인증서 파일은 2048비트 이상이어야 합니다. 신뢰할 수 있는 인증서를 사용할 필요는 없습니다. 인증서는 어셈블리가 손상되지 않은지 확인하는 데만 사용됩니다.

Microsoft SDK(Windows 소프트웨어 개발 키트)에 제공된 Pktextract.exe 유틸리티를 실행하여 인증서 파일에서 공개 키 토큰을 추출합니다. Pktextract가 제대로 작동하려면 인증서 파일이 유틸리티와 동일한 디렉터리에 있어야 합니다. 추출된 공개 키 토큰 값을 사용하여 매니페스트 파일에서 assemblyIdentity 요소의 publicKeyToken 특성을 업데이트합니다.

다음은 MySampleAssembly.manifest라는 매니페스트 파일의 예입니다. MySampleAssembly 어셈블리에는 MYFILE.DLL 하나의 파일만 포함됩니다. assemblyIdentity 요소의 publicKeyToken 특성 값이 공개 키 토큰 값으로 업데이트되었습니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity 
        type="win32" 
        name="Microsoft.Windows.MySampleAssembly" 
        version="1.0.0.0" 
        processorArchitecture="x86"         
        publicKeyToken="0000000000000000"/>
    <file name="myfile.dll"/>
</assembly>

다음으로 Windows SDK에 제공된 Mt.exe 유틸리티를 실행합니다. 어셈블리 파일은 매니페스트와 동일한 디렉터리에 있어야 합니다. 이 예제에서는 MySampleAssembly 디렉터리입니다. 예제에 대해 다음과 같이 Mt.exe 호출합니다.

C:\ MySampleAssembly>mt.exe -manifest MySampleAssembly.manifest -hashupdate -makecdfs

다음은 예제 매니페스트가 Mt.exe 실행한 후 표시되는 방식입니다. hashupdate 옵션을 사용하여 Mt.exe 실행하면 파일의 SHA-1 해시가 추가됩니다. 이 값은 변경하지 마세요.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity 
        type="win32" 
        name=" Microsoft.Windows.MySampleAssembly" 
        version="1.0.0.0" 
        processorArchitecture="x86"         
        publicKeyToken="0000000000000000"/>
    <file name="myfile.dll"
hash="a1d362d6278557bbe965a684ac7adb4e57427a29" hashalg="SHA1"/>
</assembly>

-makecdfs 옵션을 사용하여 Mt.exe 실행하면 매니페스트의 유효성을 검사하는 데 사용할 보안 카탈로그의 내용을 설명하는 MySampleAssembly.manifest.cdf라는 파일이 생성됩니다.

다음 단계는 이 .cdf를 통해 Makecat.exe 실행하여 어셈블리에 대한 보안 카탈로그를 만드는 것입니다. 이 예제의 Makecat.exe 호출은 다음과 같이 표시됩니다.

c:\MySampleAssembly>makecat MySampleAssembly.manifest.cdf

마지막 단계는 SignTool.exe 실행하여 인증서를 사용하여 카탈로그 파일에 서명하는 것입니다. 이는 위의 공개 키 토큰을 생성하는 데 사용된 것과 동일한 인증서여야 합니다. SignTool.exe 대한 자세한 내용은 SignTool 항목을 참조하세요. 예제에 대한 SignTool 호출은 다음과 같이 표시됩니다.

c:\MySampleAssembly>signtool sign /f <fullpath>mycompany.pfx /du https://www.mycompany.com/MySampleAssembly /t https://timestamp.digicert.com MySampleAssembly.cat

인증된 디지털 인증서가 있고 인증 기관이 PVK 파일 형식을 사용하여 프라이빗 키를 저장하는 경우 PVK 디지털 인증서 파일 가져오기(pvkimprt.exe)를 사용하여 CSP(암호화 서비스 공급자)로 키를 가져올 수 있습니다. 이 유틸리티를 사용하면 PFX/P12의 업계 표준 형식으로 내보낼 수 있습니다. PVK 디지털 인증서 파일 가져오기에 대한 자세한 내용은 MSDN 라이브러리의 배포 리소스 섹션을 참조하거나 인증 기관에 문의하세요.

서명된 파일 및 카탈로그 만들기도 참조하세요.