어셈블리 및 매니페스트 서명 관리Managing Assembly and Manifest Signing

강력한 이름 서명은 소프트웨어 구성 요소에 전역적으로 고유한 ID를 제공합니다.Strong-name signing gives a software component a globally unique identity. 강력한 이름은 어셈블리가 다른 사용자에 의해 스푸핑되지 않도록 보장하고 구성 요소 종속성 및 구성 문이 올바른 구성 요소 및 구성 요소 버전에 매핑되도록 하는 데 사용됩니다.Strong names are used to guarantee that the assembly cannot be spoofed by someone else, and to ensure that component dependencies and configuration statements map to the correct component and component version.

강력한 이름은 어셈블리 ID(단순 텍스트 이름, 버전 번호 및 문화권 정보) 및 공개 키 토큰과 디지털 서명으로 구성됩니다.A strong name consists of the assembly's identity (simple text name, version number, and culture information), plus a public key token and a digital signature.

Visual Basic 및 C# 프로젝트의 어셈블리 서명에 대한 자세한 내용은 강력한 이름의 어셈블리 만들기 및 사용을 참조하세요.For information about signing assemblies in Visual Basic and C# projects, see Creating and Using Strong-Named Assemblies.

Visual C++ 프로젝트의 어셈블리 서명에 대한 자세한 내용은 강력한 이름 어셈블리(어셈블리 서명)(C++/CLI)를 참조하세요.For information about signing assemblies in Visual C++ projects, see Strong Name Assemblies (Assembly Signing) (C++/CLI).

참고

강력한 이름 서명은 어셈블리의 리버스 엔지니어링으로부터 보호하지 않습니다.Strong-name signing does not protect against reverse-engineering of the assembly. 리버스 엔지니어링으로부터 보호하려면 Dotfuscator CE(Community Edition)를 참조하세요.To protect against reverse-engineering, see Dotfuscator Community Edition (CE).

자산 형식 및 서명Asset Types and Signing

.NET 어셈블리 및 응용 프로그램 매니페스트에 서명할 수 있습니다.You can sign .NET assemblies and application manifests. 이러한 요구 사항은 다음과 같습니다.These include the following:

  • 실행 파일(.exe)executables (.exe)

  • 응용 프로그램 매니페스트(.exe.manifest)application manifests (.exe.manifest)

  • 배포 매니페스트(.application)deployment manifests (.application)

  • 공유 구성 요소 어셈블리(.dll)shared component assemblies (.dll)

다음 자산 형식에 서명해야 합니다.You must sign the following types of asset:

  1. GAC(전역 어셈블리 캐시)에 배포하려는 경우 어셈블리입니다.Assemblies, if you want to deploy them to the global assembly cache (GAC).

  2. ClickOnceClickOnce 응용 프로그램 및 배포 매니페스트. application and deployment manifests. Visual Studio에서는 이러한 응용 프로그램에 기본적으로 서명할 수 있습니다.Visual Studio enables signing by default for these applications.

  3. 주 interop 어셈블리(COM 상호 운용성에 사용됨).Primary interop assemblies, which are used for COM interoperability. TLBIMP 유틸리티는 COM 형식 라이브러리에서 주 interop 어셈블리를 만들 때 강력한 이름 지정을 적용합니다.The TLBIMP utility enforces strong-naming when creating a primary interop assembly from a COM type library.

일반적으로 실행 파일에는 서명하면 안 됩니다.In general you should not sign executables. 강력한 이름의 구성 요소는 응용 프로그램과 함께 배포되는 강력한 이름이 아닌 구성 요소를 참조할 수 없습니다.A strongly-named component cannot reference a non-strongly-named component that is deployed with the application. Visual Studio에서는 응용 프로그램 실행 파일에 서명하지 않고 약한 이름의 실행 파일을 가리키는 응용 프로그램 매니페스트에 서명합니다.Visual Studio does not sign application executables, but instead signs the application manifest, which points to the weak-named executable. 일반적으로 응용 프로그램 전용의 구성 요소에는 서명하지 않는 것이 좋습니다. 서명으로 인해 종속성 관리가 더 어려워질 수 있기 때문입니다.You should generally avoid signing components that are private to your application, because signing can make it more difficult to manage dependencies.

Visual Studio에서 어셈블리에 서명하는 방법How to Sign an Assembly in Visual Studio

[프로젝트 속성] 창의 서명 탭을 사용하여 응용 프로그램 또는 구성 요소에 서명합니다(솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 속성을 선택하거나, 빠른 실행 창에 프로젝트 속성을 입력하거나, 솔루션 탐색기 창 내에서 ALT+ ENTER를 누름).You sign an application or component by using the Signing tab of the project properties window (right-click the project node in the Solution Explorer and select Properties, or type project properties in the Quick Launch window, or press ALT+ ENTER inside the Solution Explorer window). 서명 탭을 선택하고 나서 어셈블리 서명 확인란을 선택합니다.Select the Signing tab, then select the Sign the assembly check box.

키 파일을 지정합니다.Specify a key file. 새 키 파일을 만들도록 선택하면 새 키 파일은 항상 .pfx 형식으로 만들어집니다.If you choose to create a new key file, note that new key files are always created in the .pfx format. 새 파일의 이름 및 암호가 필요합니다.You need a name and password for the new file.

경고

다른 사용자가 사용하지 못하도록 키 파일을 항상 암호로 보호해야 합니다.You should always protect your key file with a password to prevent someone else from using it. 공급자 또는 인증서 저장소를 사용하여 키를 보호할 수도 있습니다.You can also secure your keys by using providers or certificate stores.

이미 만든 키를 가리킬 수도 있습니다.You can also point to a key you have already created. 키 만들기에 대한 자세한 내용은 방법: 공개/개인 키 쌍 만들기를 참조하세요.For more information about creating keys, see How to: Create a Public-Private Key Pair.

공개 키에만 액세스할 수 있는 경우 서명 연기를 사용하여 키 할당을 지연시킬 수 있습니다.If you have access only to a public key, you can use delay signing to defer assigning the key. 서명만 연기 확인란을 선택하여 서명 연기를 사용하도록 설정합니다.You enable delay signing by selecting the Delay sign only check box. 지연 서명된 프로젝트가 실행되지 않고 이 프로젝트를 디버그할 수 없습니다.A delay-signed project won't run, and you can't debug it. 그러나 Sn.exe(강력한 이름 도구)-Vr 옵션과 함께 사용하여 개발 중에 확인을 건너뛸 수 있습니다.However, you can skip verification during development by using the Sn.exe (Strong Name Tool) with the -Vr option.

매니페스트 서명에 대한 자세한 내용은 방법: 응용 프로그램 및 배포 매니페스트 서명을 참조하세요.For information about signing manifests, see How to: Sign Application and Deployment Manifests.

참고 항목See Also

강력한 이름의 어셈블리 Strong-Named Assemblies
강력한 이름 어셈블리(어셈블리 서명)(C++/CLI)Strong Name Assemblies (Assembly Signing) (C++/CLI)