조직은 개발자가 매일 액세스할 수 없는 밀접하게 보호된 키 쌍을 가질 수 있습니다. 공개 키는 종종 사용할 수 있지만 프라이빗 키에 대한 액세스는 소수의 개인으로만 제한됩니다. 강력한 이름을 가진 어셈블리를 개발할 때 강력한 이름의 대상 어셈블리를 참조하는 각 어셈블리에는 대상 어셈블리에 강력한 이름을 지정하는 데 사용되는 공개 키의 토큰이 포함됩니다. 이렇게 하려면 개발 프로세스 중에 공개 키를 사용할 수 있어야 합니다.
빌드 시 지연 또는 부분 서명을 사용하여 강력한 이름 서명에 대한 PE(이식 가능한 실행 파일) 파일의 공간을 예약할 수 있지만, 일반적으로 어셈블리를 배송하기 직전에 일부 이후 단계까지 실제 서명을 연기할 수 있습니다.
어셈블리를 지연 서명하려면:
최종 서명을 수행할 조직에서 키 쌍의 공개 키 부분을 가져옵니다. 일반적으로 이 키는 Windows SDK에서 제공하는 강력한 이름 도구(Sn.exe)를 사용하여 만들 수 있는 .snk 파일 형식입니다.
어셈블리의 소스 코드에 System.Reflection의 두 사용자 지정 속성을 주석으로 삽입합니다.
AssemblyKeyFileAttribute- 공개 키가 포함된 파일의 이름을 해당 생성자에 매개 변수로 전달합니다.
AssemblyDelaySignAttribute- true 를 해당 생성자에 매개 변수로 전달하여 지연 서명이 사용되고 있음을 나타냅니다.
다음은 그 예입니다.
[assembly:AssemblyKeyFileAttribute("myKey.snk")]; [assembly:AssemblyDelaySignAttribute(true)];
[assembly:AssemblyKeyFileAttribute("myKey.snk")] [assembly:AssemblyDelaySignAttribute(true)]
<Assembly:AssemblyKeyFileAttribute("myKey.snk")> <Assembly:AssemblyDelaySignAttribute(True)>
컴파일러는 공개 키를 어셈블리 매니페스트에 삽입하고 PE 파일에서 전체 강력한 이름 서명을 위해 공간을 예약합니다. 이 어셈블리를 참조하는 다른 어셈블리가 자체 어셈블리 참조에 저장할 키를 가져올 수 있도록 어셈블리가 빌드되는 동안 실제 공개 키를 저장해야 합니다.
어셈블리에 유효한 강력한 이름 서명이 없으므로 해당 서명의 확인을 해제해야 합니다. 강력한 이름 도구와 함께 -Vr 옵션을 사용하여 이 작업을 수행할 수 있습니다.
다음 예제에서는 myAssembly.dll라는 어셈블리에 대 한 확인을 해제 합니다.
sn -Vr myAssembly.dll
ARM(Advanced RISC Machine) 마이크로프로세서와 같이 강력한 이름 도구를 실행할 수 없는 플랫폼에서 확인을 해제하려면 -Vk 옵션을 사용하여 레지스트리 파일을 만듭니다. 확인을 해제하려는 컴퓨터의 레지스트리로 레지스트리 파일을 가져옵니다. 다음 예제에서는 에 대한
myAssembly.dll
레지스트리 파일을 만듭니다.sn -Vk myRegFile.reg myAssembly.dll
-Vr 또는 -Vk 옵션을 사용하면 선택적으로 테스트 키 서명에 .snk 파일을 포함할 수 있습니다.
경고
보안을 위해 강력한 이름을 사용하지 마세요. 고유한 ID만 제공합니다.
비고
64비트 컴퓨터에서 Visual Studio를 사용하여 개발하는 동안 서명 지연을 사용하고 모든 CPU에 대한 어셈블리를 컴파일하는 경우 -Vr 옵션을 두 번 적용해야 할 수 있습니다. (Visual Studio에서 모든 CPU 는 플랫폼 대상 빌드 속성의 값입니다. 명령줄에서 컴파일하는 경우 기본값입니다.) 명령줄 또는 파일 탐색기에서 애플리케이션을 실행하려면 64비트 버전의 Sn.exe(강력한 이름 도구) 를 사용하여 어셈블리에 -Vr 옵션을 적용합니다. 디자인 타임에 어셈블리를 Visual Studio에 로드하려면(예: 어셈블리에 애플리케이션의 다른 어셈블리에서 사용하는 구성 요소가 포함된 경우) 강력한 이름 도구의 32비트 버전을 사용합니다. 이는 JIT(Just-In-Time) 컴파일러가 명령줄에서 어셈블리를 실행할 때 어셈블리를 64비트 네이티브 코드로 컴파일하고, 어셈블리가 디자인 타임 환경에 로드될 때 32비트 네이티브 코드로 컴파일하기 때문입니다.
나중에 일반적으로 배송 직전에 강력한 이름 도구와 함께 -R 옵션을 사용하여 실제 강력한 이름 서명에 대한 어셈블리를 조직의 서명 기관에 제출합니다.
다음 예제에서는 sgKey.snk 키 쌍을 사용하여 강력한 이름으로 myAssembly.dll 이라는 어셈블리에 서명합니다.
sn -R myAssembly.dll sgKey.snk
참고하십시오
.NET