다음을 통해 공유


강력한 이름 시나리오

업데이트: 2007년 11월

다음 시나리오에서는 강력한 이름으로 어셈블리를 서명하고 나중에 이 이름을 사용하여 어셈블리를 참조하는 과정에 대해 설명합니다.

  1. 다음 방법 중 하나를 사용하여 강력한 이름으로 어셈블리 A를 만듭니다.

    • 강력한 이름 만들기를 지원하는 Visual Studio 2005 등의 개발 환경을 사용합니다.

    • 강력한 이름 도구(Sn.exe)를 사용하여 암호화 키 쌍을 만들고 명령줄 컴파일러 또는 어셈블리 링커(Al.exe)를 사용하여 키 쌍을 어셈블리에 할당합니다. Windows SDK(소프트웨어 개발 키트)는 Sn.exe와 Al.exe를 모두 제공합니다.

  2. 개발 환경이나 도구에서는 어셈블리 매니페스트가 포함된 파일의 해시를 개발자 개인 키를 사용하여 서명합니다. 이 디지털 서명은 어셈블리 A의 매니페스트가 포함된 PE(이식 가능한 실행) 파일에 저장됩니다.

  3. 어셈블리 B는 어셈블리 A의 소비자입니다. 어셈블리 B의 매니페스트에 있는 참조 섹션에는 어셈블리 A의 공개 키를 나타내는 토큰이 들어 있습니다. 토큰은 전체 공개 키의 일부이며, 키 전체를 사용하는 대신 토큰을 사용하여 공간을 절약합니다.

  4. 어셈블리가 전역 어셈블리 캐시에 저장되면 공용 언어 런타임에서는 강력한 이름 시그니처를 확인합니다. 런타임에 강력한 이름으로 바인딩을 수행하는 경우, 공용 언어 런타임에서는 어셈블리 B의 매니페스트에 저장된 키와 어셈블리 A의 강력한 이름을 만드는데 사용된 키를 비교합니다. .NET Framework 보안에서 이 패스를 검사하고 바인딩이 성공하면, 어셈블리 B에서는 어셈블리 A의 비트가 훼손되지 않았고 이 비트가 실제로 어셈블리 A의 개발자로부터 전송된 것임을 보증합니다.

참고:

이 시나리오에서는 신뢰 문제를 다루지 않습니다. 어셈블리에는 강력한 이름 이외에도 전체 Microsoft Authenticode 서명이 있을 수 있습니다. Authenticode 서명에는 신뢰 관계를 설정하는 인증서가 들어 있습니다. 강력한 이름에서는 이런 방식으로 코드를 서명할 필요가 없다는 점에 주목합니다. 사실, 강력한 이름 시그니처를 만드는 데 사용되는 키와 Authenticode 서명을 만드는 데 사용되는 키가 반드시 동일할 필요가 없습니다.

신뢰할 수 있는 어셈블리에 대한 서명 확인 건너뛰기

.NET Framework 버전 3.5 서비스 팩 1부터는 어셈블리가 완전 신뢰 응용 프로그램 도메인(예: MyComputer 영역의 기본 응용 프로그램 도메인)에 로드될 때 강력한 이름 서명의 유효성이 검사되지 않습니다. 이를 강력한 이름 건너뛰기 기능이라고 합니다. 완전 신뢰 환경에서는 서명된 완전 신뢰 어셈블리에 대한 StrongNameIdentityPermission 요청이 해당 서명에 관계없이 항상 성공합니다. 강력한 이름 건너뛰기 기능을 사용하면 이러한 상황에서 완전 신뢰 어셈블리의 강력한 이름 서명을 확인하는 데 따르는 불필요한 오버헤드가 발생하지 않으므로 어셈블리가 더 빠르게 로드됩니다.

건너뛰기 기능은 강력한 이름으로 서명되었으며 다음과 같은 특징이 있는 모든 어셈블리에 적용됩니다.

  • StrongName 증명 정보 없이 완전 신뢰 가능(예: MyComputer 영역 증명 정보 보유)

  • 완전 신뢰 AppDomain에 로드

  • 해당 AppDomainApplicationBase 속성 아래에 있는 위치에서 로드

  • 서명이 연기되지 않음

개별 응용 프로그램이나 컴퓨터에 대해 이 기능을 해제할 수 있습니다. 자세한 내용은 방법: 강력한 이름 건너뛰기 기능 비활성화를 참조하십시오.

참고 항목

참조

강력한 이름 도구(Sn.exe)

어셈블리 링커(Al.exe)

기타 리소스

강력한 이름의 어셈블리 만들기 및 사용