다음을 통해 공유


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

업데이트: 2011년 4월

강력한 이름 도구(Sn.exe)를 사용하면 강력한 이름으로 어셈블리에 서명할 수 있습니다. Sn.exe를 실행하면 키 관리, 서명 생성 및 서명 확인을 위한 옵션이 제공됩니다.

참고참고

64비트 컴퓨터에서는 Visual Studio 명령 프롬프트를 사용하여 32비트 Sn.exe 버전을 실행하고 Visual Studio x64 Win64 명령 프롬프트를 사용하여 64비트 버전을 모두 실행합니다.

이 도구는 Visual Studio 및 Windows SDK와 함께 자동으로 설치됩니다. 도구를 실행하려면 Visual Studio 명령 프롬프트 또는 Windows SDK 명령 프롬프트(CMD 셸)를 사용하는 것이 좋습니다. 이러한 유틸리티를 사용하면 설치 폴더를 탐색하지 않고도 도구를 쉽게 실행할 수 있습니다. 자세한 내용은 Visual Studio 및 Windows SDK 명령 프롬프트을 참조하십시오.

  • 컴퓨터에 Visual Studio를 설치한 경우 작업 표시줄에서 Start, All Programs, Visual Studio, Visual Studio Tools 및 Visual Studio Command Prompt를 차례로 클릭합니다.

    또는

    컴퓨터에 Windows SDK를 설치한 경우 작업 표시줄에서 Start, All Programs 및 Windows SDK의 폴더를 차례로 클릭한 다음 Command Prompt(또는 CMD Shell)를 클릭합니다.

  • 명령 프롬프트에 다음과 같이 입력합니다.

sn [-quiet][option [parameter(s)]]

매개 변수

Option

설명

-c [csp]

강력한 이름 서명에 사용할 기본 CSP(암호화 서비스 공급자)를 설정하며, 이 설정은 컴퓨터 전체에 적용됩니다. CSP 이름을 지정하지 않으면 현재 설정이 지워집니다.

-d container

지정된 키 컨테이너를 강력한 이름 CSP에서 삭제합니다.

-D assembly1 assembly2

두 개의 어셈블리가 서명만 다른지 확인합니다. 이 옵션은 다른 키 쌍을 사용하여 어셈블리를 다시 서명한 후의 검사 방법으로 종종 사용됩니다.

-e 어셈블리 outfile

assembly에서 공개 키를 추출하여 outfile에 저장합니다.

-h

이 도구의 명령 구문 및 옵션을 표시합니다.

-i infile container

지정된 키 컨테이너에 있는 infile에서 키 쌍을 설치합니다. 키 컨테이너는 강력한 이름 CSP에 상주합니다.

-k [keysize] outfile

지정한 크기의 새 RSACryptoServiceProvider 키를 생성하여 지정된 파일에 씁니다. 공개 키와 개인 키 모두 이 파일에 작성됩니다.

키 크기를 지정하지 않으면 Microsoft 고급 암호화 공급자가 설치된 경우 기본적으로 1,024비트 키가 생성되고 그렇지 않은 경우 512비트 키가 생성됩니다.

keysize 매개 변수는 Microsoft 고급 암호화 공급자가 설치된 경우 8비트씩 증가시킬 수 있는 384비트에서 16,384비트까지의 키 길이를 지원합니다. Microsoft Base Cryptographic Provider가 설치된 경우에는 8비트씩 증가시킬 수 있는 384비트에서 512비트까지의 키 길이를 지원합니다.

-m [y|n]

키 컨테이너가 컴퓨터 관련 컨테이너인지 아니면 사용자 관련 컨테이너인지를 지정합니다. y를 지정하면 키 컨테이너는 컴퓨터 관련 컨테이너입니다. n을 지정하면 키 컨테이너는 사용자 관련 컨테이너입니다.

y나 n을 모두 지정하지 않으면 현재 설정이 표시됩니다.

-o infile [outfile]

infile에서 공개 키를 추출하여 .csv 파일에 저장합니다. 공개 키의 각 바이트는 쉼표로 구분됩니다. 이 형식은 키에 대한 참조를 소스 코드의 초기화된 배열로 하드 코드하는 데 유용합니다. outfile을 지정하지 않으면 출력 파일은 클립보드에 넣어집니다.

참고참고
이 옵션은 입력 파일에 공개 키만 있는지는 확인하지 않습니다.infile에 개인 키를 포함한 키 쌍이 들어 있으면 개인 키도 추출됩니다.

-p infile outfile

infile의 키 쌍에서 공개 키를 추출하여 outfile에 저장합니다. 이 공개 키는 어셈블리 링커(Al.exe)/delaysign+/keyfile 옵션을 사용하여 어셈블리 서명을 연기하는 데 사용될 수 있습니다. 어셈블리 서명이 연기되면 컴파일 타임에 공개 키만 설정되고, 나중에 개인 키가 알려질 때 서명을 추가할 공간이 파일에 예약됩니다.

-pc container outfile

container의 키 쌍에서 공개 키를 추출하여 outfile에 저장합니다.

-Pb [y|n]

강력한 이름 건너뛰기 정책을 적용할지 여부를 지정합니다. y를 지정하면 완전 신뢰 AppDomain에 완전 신뢰 어셈블리가 로드될 때 강력한 이름의 유효성이 검사되지 않습니다. n을 지정하면 강력한 이름이 올바른지 검사되지만 특정 강력한 이름은 검사되지 않습니다. 완전 신뢰 어셈블리에는 StrongNameIdentityPermission이 적용되지 않으므로 강력한 이름이 일치하는지 여부는 직접 검사해야 합니다.

y나 n을 모두 지정하지 않으면 현재 설정이 표시됩니다. 기본값은 y입니다.

참고참고
64비트 컴퓨터에서는 Sn.exe의 32비트 및 64비트 인스턴스 모두에 이 매개 변수를 설정해야 합니다.

-q[uiet]

자동 모드를 지정합니다. 즉, 성공 메시지가 표시되지 않도록 합니다.

-R[a] assembly infile

infile에 있는 키 쌍을 사용하여 이전에 서명했거나 서명을 연기한 어셈블리에 다시 서명합니다.

-Ra를 사용하는 경우 어셈블리에 있는 모든 파일에 대해 해시가 다시 계산됩니다.

-Rc[a] assembly container

container에 있는 키 쌍을 사용하여 이전에 서명했거나 서명이 연기된 어셈블리에 다시 서명합니다.

-Rca를 사용하는 경우 어셈블리에 있는 모든 파일에 대해 해시가 다시 계산됩니다.

-Rh assembly

어셈블리에 있는 모든 파일에 대해 해시를 다시 계산합니다.

-t[p] infile

infile에 저장된 공개 키의 토큰을 표시합니다. infile의 내용은 이전에 -p를 사용하여 키 쌍 파일로부터 생성된 공개 키여야 합니다. -t[p] 옵션을 사용하여 키 쌍 파일에서 직접 토큰을 추출하지 마십시오.

Sn.exe는 해시 함수를 사용하여 공개 키에서 토큰을 계산합니다. 공용 언어 런타임에서는 공간을 절약하기 위해 강력한 이름을 가진 어셈블리에 대한 종속성을 기록할 때 매니페스트의 공개 키 토큰을 다른 어셈블리에 대한 참조의 일부로 저장합니다. -tp 옵션을 사용하면 공개 키와 토큰이 모두 표시됩니다.

이 옵션은 어셈블리 서명을 확인하지 않으며 신뢰 결정을 내리는 데 사용해서는 안 됩니다. 이 옵션은 원시 공개 키 토큰 데이터만 표시합니다.

-T[p] assembly

어셈블리에 대한 공용 키 토큰을 표시합니다. assembly 는 어셈블리 매니페스트가 들어 있는 파일의 이름이어야 합니다.

Sn.exe는 해시 함수를 사용하여 공개 키에서 토큰을 계산합니다. 런타임에서는 공간을 절약하기 위해 강력한 이름을 가진 어셈블리에 대한 종속성을 기록할 때 매니페스트의 공개 키 토큰을 다른 어셈블리에 대한 참조의 일부로 저장합니다. -Tp 옵션을 사용하면 공개 키와 토큰이 모두 표시됩니다.

이 옵션은 어셈블리 서명을 확인하지 않으며 신뢰 결정을 내리는 데 사용해서는 안 됩니다. 이 옵션은 원시 공개 키 토큰 데이터만 표시합니다.

-TSassembly infile

infile의 키 쌍을 사용하여 서명되거나 부분적으로 서명된 assembly의 서명을 테스트합니다.

-TSc assembly container

container 키 컨테이너의 키 쌍을 사용하여 서명되거나 부분적으로 서명된 assembly의 서명을 테스트합니다.

-v assembly

assembly에 있는 강력한 이름을 확인합니다. 여기에서 assembly는 어셈블리 매니페스트가 들어 있는 파일의 이름입니다.

-vf assembly

어셈블리에서 강력한 이름을 확인합니다. -v 옵션과는 달리 -vf 옵션을 사용하면 -Vr 옵션으로 비활성화된 경우에도 확인이 수행됩니다.

-Vl

해당 컴퓨터의 강력한 이름 확인에 대한 현재 설정을 표시합니다.

-Vr assembly [userlist] [infile]

확인을 건너뛸 assembly를 등록합니다. 선택적으로, 쉼표로 구분된 사용자 이름 목록을 지정할 수도 있습니다. infile을 지정하면 확인은 활성화된 상태로 유지되지만 infile의 공개 키는 확인 작업에 사용됩니다. Assembly*, strongname 형식으로 지정하여 지정된 강력한 이름을 가진 모든 어셈블리를 등록할 수 있습니다. Strongname은 공개 키의 토큰 형식을 나타내는 16진 문자열로 지정해야 합니다. 공개 키 토큰을 표시하려면 -t-T 옵션을 참조하십시오.

주의 정보주의
개발하는 동안에만 이 옵션을 사용합니다.어셈블리를 확인 건너뛰기 목록에 추가하면 보안상 허점이 발생합니다.악의적인 어셈블리가 확인 건너뛰기 목록에 추가된 어셈블리의 정규화된 어셈블리 이름(어셈블리 이름, 버전, culture 및 공개 키 토큰)을 사용하여 해당 어셈블리의 ID를 모방할 수 있습니다.이렇게 되면 악의적인 어셈블리도 확인을 건너뛸 수 있습니다.

-Vu assembly

확인을 건너뛸 assembly를 등록 취소합니다. -Vr에 적용되는 것과 동일한 어셈블리 명명 규칙이 -Vu에도 적용됩니다.

-Vx

확인을 건너뛸 모든 엔트리를 제거합니다.

-?

이 도구의 명령 구문 및 옵션을 표시합니다.

참고참고

Sn.exe의 모든 옵션은 대/소문자가 구분되므로 표시된 대로 정확히 입력해야만 도구에서 제대로 인식합니다.

설명

-R–Rc 옵션은 서명이 연기된 어셈블리에 유용합니다. 이 시나리오에서는 컴파일 타임에 공개 키만 설정되고, 나중에 개인 키가 알려질 때 서명이 수행됩니다.

참고참고

레지스트리 같은 보호되는 리소스에 쓰는 매개 변수(예: –Vr)는 SN.exe를 관리자로 실행합니다.

예제

다음 명령을 사용하여 난수 키 쌍을 새로 만들어 keyPair.snk에 저장합니다.

sn -k keyPair.snk

다음 명령을 사용하여 keyPair.snk에 있는 키를 강력한 이름 CSP의 MyContainer 컨테이너에 저장합니다.

sn -i keyPair.snk MyContainer

다음 명령을 사용하여 keyPair.snk에서 공개 키를 추출하여 publicKey.snk에 저장합니다.

sn -p keyPair.snk publicKey.snk

다음 명령은 publicKey.snk에 들어 있는 공개 키와 공개 키의 토큰을 표시합니다.

sn -tp publicKey.snk

다음 명령을 사용하여 어셈블리 MyAsm.dll을 확인합니다.

sn -v MyAsm.dll

다음 명령을 사용하여 기본 CSP에서 MyContainer를 삭제합니다.

sn -d MyContainer

참고 항목

참조

Al.exe(어셈블리 링커)

Visual Studio 및 Windows SDK 명령 프롬프트

개념

강력한 이름의 어셈블리

기타 리소스

.NET Framework 도구

변경 기록

날짜

변경 내용

이유

2011년 4월

Visual Studio 및 Windows SDK 명령 프롬프트 사용에 대한 정보를 추가했습니다.

향상된 기능 관련 정보

2010년 8월

64비트 컴퓨터에서 도구를 실행하는 방법에 대한 정보를 추가했습니다.

향상된 기능 관련 정보