어셈블리 서명 예제

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

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

어셈블리 파일, 어셈블리 매니페스트 및 어셈블리 서명에 사용할 인증서 파일로 시작합니다. 인증서 파일은 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의 업계 표준 형식으로 내보낼 수 있습니다.

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