Share via


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

강력한 이름은 간단한 텍스트 이름, 버전 번호 및 문화권 정보(제공되는 경우)를 포함하는 어셈블리 ID와 공개 키 및 디지털 서명으로 이루어집니다. 강력한 이름은 공개 키에 대응하는 개인 키를 사용하여 어셈블리에서 만들어집니다. 어셈블리 파일에 포함된 어셈블리 매니페스트에는 이 어셈블리를 구성하는 모든 파일의 이름과 해시가 들어 있습니다.

강력한 이름의 어셈블리는 다른 강력한 이름의 어셈블리 형식만 사용할 수 있습니다. 그렇지 않으면 강력한 이름의 어셈블리에 대한 보안이 손상됩니다.

이 개요는 다음과 같은 단원으로 구성됩니다.

  • 강력한 이름 시나리오

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

  • 관련 항목

강력한 이름 시나리오

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

  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 보안 검사를 통과하고 바인딩에 성공하면 어셈블리 A의 비트가 변조되지 않았고 이러한 비트가 실제로 어셈블리 A의 개발자로부터 전달된 것임을 어셈블리 B에서 확인하게 됩니다.

참고참고

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

맨 위로 이동

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

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

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

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

  • 완전 신뢰 AppDomain에 로드

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

  • 서명이 연기되지 않음

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

맨 위로 이동

관련 항목

제목

설명

방법: 공개/개인 키 쌍 만들기

어셈블리 서명을 위해 암호화 키 쌍을 만드는 방법에 대해 설명합니다.

방법: 강력한 이름으로 어셈블리 서명

강력한 이름의 어셈블리를 만드는 방법에 대해 설명합니다.

방법: 강력한 이름의 어셈블리 참조

컴파일 타임 또는 런타임에 강력한 이름의 어셈블리에 있는 형식 또는 리소스를 참조하는 방법에 대해 설명합니다.

방법: 강력한 이름 건너뛰기 기능 비활성화

강력한 이름 서명의 유효성 검사를 우회하는 기능을 비활성화하는 방법에 대해 설명합니다. 이 기능은 모든 응용 프로그램 또는 특정 응용 프로그램에 대해 비활성화할 수 있습니다.

어셈블리 만들기

단일 파일 어셈블리와 다중 파일 어셈블리에 대해 설명합니다.

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

어셈블리를 만든 다음 강력한 이름으로 어셈블리에 서명하는 방법에 대해 설명합니다.

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

강력한 이름의 어셈블리를 만들 수 있도록 .NET Framework에 포함되어 있는 도구에 대해 설명합니다. 이 도구는 키 관리, 서명 생성 및 서명 확인을 위한 옵션을 제공합니다.

Al.exe(어셈블리 링커)

어셈블리 매니페스트가 있는 파일을 모듈 또는 리소스 파일에서 생성하며 .NET Framework에 포함되어 있는 도구에 대해 설명합니다.

맨 위로 이동