관리되는 응용 프로그램의 강력한 이름 서명

강력한 이름 서명, 즉 강력한 이름 지정을 사용하면 소프트웨어 구성 요소에 다른 사람이 스푸핑할 수 없는 GUID(Globally Unique Identity)를 제공할 수 있습니다. 강력한 이름은 구성 요소 종속성 및 구성 문이 해당 구성 요소와 구성 요소 버전에 정확히 매핑되도록 하는 데 사용됩니다.

강력한 이름은 어셈블리의 ID(간단한 텍스트 이름, 버전 번호 및 문화권 정보)와 공개 키 토큰 및 디지털 서명으로 이루어집니다.

Visual C# 및 Visual Basic 프로젝트의 경우 Visual Studio에서는 프로젝트 디자이너서명 창을 통해 강력한 이름을 활성화합니다. 프로젝트 디자이너, 서명 페이지를 참조하십시오.

Visual C++ 프로젝트의 경우 링커 옵션을 사용하여 어셈블리에 서명합니다. 강력한 이름 어셈블리(어셈블리 서명)(C++/CLI)를 참조하십시오.

강력한 이름을 사용하는 이유

강력한 이름 지정을 사용하면 응용 프로그램이나 구성 요소에 다른 소프트웨어가 이를 명시적으로 참조하는 데 사용할 수 있는 고유한 ID가 제공됩니다. 예를 들어 강력한 이름을 사용하면 응용 프로그램 작성자와 관리자가 공유 구성 요소에 사용할 정확한 서비스 버전을 지정할 수 있습니다. 이렇게 하면 여러 응용 프로그램이 서로 영향을 주지 않고 다양한 버전을 지정할 수 있게 됩니다. 또한 구성 요소의 강력한 이름을 두 구성 요소 간에 신뢰 관계를 구축하는 보안 증명 정보로 사용할 수 있습니다.

강력한 이름을 지정할 수 있는 대상

다음과 같은 .NET Framework 어셈블리와 XML 매니페스트에 강력한 이름을 지정할 수 있습니다. 이러한 요구 사항은 다음과 같습니다.

  • 응용 프로그램 어셈블리(.exe)

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

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

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

강력한 이름을 지정해야 하는 대상

공유 DLL에는 강력한 이름을 지정해야 합니다. DLL을 전역 어셈블리 캐시에 배포하는지 여부에 상관없이 DLL이 응용 프로그램의 전용 구현 정보가 아니라 둘 이상의 응용 프로그램에서 사용할 수 있는 일반적인 서비스인 경우에는 강력한 이름을 지정하는 것이 좋습니다.

반드시 강력한 이름을 지정해야 하는 대상

다음 항목에는 반드시 강력한 이름을 지정해야 합니다.

  • DLL(전역 어셈블리 캐시에 배포하려는 경우)

  • ClickOnce 응용 프로그램 및 배포 매니페스트. Visual Studio 프로젝트 시스템에서는 기본적으로 ClickOnce 배포 응용 프로그램에 대해 강력한 이름을 사용합니다.

  • COM 상호 운용성을 위해 사용되는 주 Interop 어셈블리. TLBIMP 유틸리티는 COM 형식 라이브러리에서 주 Interop 어셈블리를 만들 때 강력한 이름을 지정합니다.

강력한 이름을 지정하지 않아야 하는 대상

일반적으로 응용 프로그램의 EXE 어셈블리에는 강력한 이름을 지정하지 않아야 합니다. 강력한 이름의 응용 프로그램이나 구성 요소는 약한 이름의 구성 요소를 참조할 수 없습니다. 그러므로 EXE에 대해 강력한 이름을 지정하면 해당 EXE가 응용 프로그램과 함께 배포된 약한 이름의 DLL을 참조할 수 없게 됩니다.

이러한 이유 때문에 Visual Studio 프로젝트 시스템에서는 응용 프로그램 EXE에 강력한 이름을 지정하지 않습니다. 대신 내부적으로 약한 이름의 응용 프로그램 EXE를 가리키는 응용 프로그램 매니페스트에 강력한 이름을 지정합니다.

또한 응용 프로그램 전용 구성 요소에는 강력한 이름을 지정하지 않아야 합니다. 이 경우 강력한 이름을 지정하면 종속성을 관리하기가 어려워지므로 전용 구성 요소에 불필요한 오버헤드가 추가될 수 있습니다.

강력한 이름을 지정하는 방법

Visual Studio에서는 프로젝트 디자이너서명 창을 사용하여 응용 프로그램이나 구성 요소에 강력한 이름을 지정합니다. 서명 창에서 강력한 이름 키 파일이나 키 공급자를 사용하여 강력한 이름을 지정할 수 있습니다. 매니페스트 서명에 대한 자세한 내용은 방법: 응용 프로그램 및 배포 매니페스트 서명을 참조하십시오. 강력한 이름 키(.snk) 파일을 만드는 방법에 대한 자세한 내용은 방법: 공개/개인 키 쌍 만들기를 참조하십시오.

키 파일을 사용하는 경우 기존 키 파일을 사용하거나 새 키 파일을 만들 수 있습니다. 키 파일은 다른 사람이 사용하지 못하도록 항상 암호로 보호해야 합니다.

키 공급자 또는 인증서 저장소를 사용하여 강력한 이름 키의 보안을 유지할 수도 있습니다. 일부 키 공급자는 ID를 식별하고 키의 도난을 방지하기 위해 스마트 카드를 사용합니다.

강력한 이름의 구성 요소 업데이트

새 버전을 복사하여 기존 버전을 덮어쓰는 것만으로는 강력한 이름의 구성 요소를 사용하거나 업그레이드할 수 없습니다.

그러나 응용 프로그램 디렉터리에 있는 약한 이름의 DLL은 새 버전을 응용 프로그램 디렉터리에 복사하는 것만으로 업데이트가 가능합니다. 실제로 존재하는 버전에 관계없이 CLR(공용 언어 런타임)이 로드됩니다.

DLL에 강력한 이름이 지정되어 있으면 모든 어셈블리 참조가 새 버전을 가리키도록 전체 응용 프로그램을 다시 컴파일하거나, 응용 프로그램의 .config 파일을 업데이트하여 런타임에 이전 버전 대신 새 버전을 로드하도록 해야 합니다.

강력한 이름의 구성 요소를 사용하면 유지 관리에 좀 더 노력을 기울여야 하지만 응용 프로그램이 런타임에 필요로 하는 다른 구성 요소의 버전을 매우 명시적으로 나타낼 수 있다는 이점이 있습니다.

참고 항목

작업

방법: 응용 프로그램 및 배포 매니페스트 서명

방법: 어셈블리 서명(Visual Studio)

방법: 어셈블리 서명 연기(Visual Studio)

참조

프로젝트 디자이너, 서명 페이지

개념

ClickOnce 응용 프로그램 보안

강력한 이름의 어셈블리

강력한 이름 어셈블리(어셈블리 서명)(C++/CLI)

기타 리소스

어셈블리 및 매니페스트 서명 관리