다음을 통해 공유


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

강력한 이름 도구(Sn.exe)는 강력한 이름으로 어셈블리에 서명하는 데 도움이 됩니다. Sn.exe 키 관리, 서명 생성 및 서명 확인을 위한 옵션을 제공합니다.

경고

보안을 위해 강력한 이름을 사용하지 마세요. 고유한 ID만 제공합니다.

강력한 명명 및 강력한 이름의 어셈블리에 대한 자세한 내용은 Strong-Named 어셈블리방법: 강력한 이름으로 어셈블리 서명을 참조하세요.

강력한 이름 도구는 Visual Studio와 함께 자동으로 설치됩니다. 도구를 시작하려면 Visual Studio 개발자 명령 프롬프트 또는 Visual Studio 개발자 PowerShell을 사용합니다.

비고

64비트 컴퓨터에서 Visual Studio용 개발자 명령 프롬프트 및 Visual Studio x64 Win64 명령 프롬프트를 사용하여 64비트 버전을 사용하여 32비트 버전의 Sn.exe 실행합니다.

명령 프롬프트에서 다음을 입력합니다.

문법

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

매개 변수

Option Description
-a identityKeyPairFile signaturePublicKeyFile AssemblySignatureKeyAttribute ID 키를 파일에서 서명 키로 마이그레이션하는 데이터를 생성합니다.
-ac identityPublicKeyFile identityKeyPairContainer signaturePublicKeyFile AssemblySignatureKeyAttribute 키 컨테이너에서 서명 키로 ID 키를 마이그레이션하는 데이터를 생성합니다.
-c [csp] 강력한 이름 서명에 사용할 기본 CSP(암호화 서비스 공급자)를 설정합니다. 이 설정은 전체 컴퓨터에 적용됩니다. CSP 이름을 지정하지 않으면 Sn.exe 현재 설정을 지웁니다.
-d container 강력한 이름 CSP에서 지정된 키 컨테이너를 삭제합니다.
-D assembly1 assembly2 두 어셈블리가 서명에 의해서만 다른지 확인합니다. 어셈블리가 다른 키 쌍으로 다시 서명된 후 검사로 사용되는 경우가 많습니다.
-e assembly outfile 어셈블리에서 공개 키를 추출하고 아웃파일로 저장합니다.
-h 도구에 대한 명령 구문 및 옵션을 표시합니다.
-i infile container 지정된 키 컨테이너 에 파일에서 키 쌍을 설치합니다. 키 컨테이너는 강력한 이름 CSP에 상주합니다.
-k [keysize] outfile 지정된 크기의 새 RSACryptoServiceProvider 키를 생성하고 지정된 파일에 씁니다. 퍼블릭 키와 프라이빗 키가 모두 파일에 기록됩니다.

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

키 크기 매개 변수는 Microsoft의 향상된 암호화 공급자가 설치된 경우 384비트에서 16,384비트까지의 키 길이를 8비트 단위로 지원합니다. Microsoft 기본 암호화 공급자가 설치된 경우 384비트에서 512비트까지의 키 길이를 8비트 단위로 지원합니다.
-m [y or n] 키 컨테이너가 컴퓨터별 컨테이너인지 사용자별 컨테이너인지를 지정합니다. y를 지정하는 경우 키 컨테이너는 컴퓨터별로 다릅니다. n을 지정하는 경우 키 컨테이너는 사용자 고유입니다.

y 또는 n을 지정하지 않으면 이 옵션은 현재 설정을 표시합니다.
-o infile [outfile] 파일에서 공개 키를 추출하여 .csv 파일에 저장합니다. 쉼표는 공개 키의 각 바이트를 구분합니다. 이 형식은 소스 코드에서 초기화된 배열로 키에 대한 참조를 하드 코딩하는 데 유용합니다. 아웃파일을 지정하지 않으면 이 옵션은 출력을 클립보드에 배치합니다. 메모: 이 옵션은 입력이 공개 키일 뿐인지 확인하지 않습니다. infile 프라이빗 키가 있는 키 쌍이 포함된 경우 프라이빗 키도 추출됩니다.
-p infile outfile [hashalg] infile의 키 쌍에서 공개 키를 추출하고 선택적으로 hashalg로 지정된 RSA 알고리즘을 사용하여 아웃파일로 저장합니다. 이 공개 키는 어셈블리 링커(Al.exe)/delaysign+/keyfile 옵션을 사용하여 어셈블리에 서명하는 데 사용할 수 있습니다. 어셈블리가 지연 서명되면 퍼블릭 키만 컴파일 시간에 설정되고 프라이빗 키가 알려진 경우 서명이 나중에 추가될 수 있도록 파일에 공백이 예약됩니다.
-pc container outfile [hashalg] 컨테이너의 키 쌍에서 공개 키를 추출하여 아웃파일로 저장합니다. hashalg 옵션을 사용하는 경우 RSA 알고리즘을 사용하여 공개 키를 추출합니다.
-Pb [y or n] 강력한 이름 바이패스 정책이 적용되는지 여부를 지정합니다. y를 지정하는 경우 완전 신뢰 어셈블리에 로드할 때 전체 신뢰 어셈블리에 대한 강력한 이름의 유효성이 AppDomain검사되지 않습니다. n을 지정하는 경우 강력한 이름은 정확성에 대한 유효성이 검사되지만 특정 강력한 이름에는 유효성이 검사되지 않습니다. 완전 StrongNameIdentityPermission 신뢰 어셈블리에는 영향을 주지 않습니다. 강력한 이름 일치에 대한 자체 검사를 수행해야 합니다.

둘 다 지정하지 yn 않으면 이 옵션은 현재 설정을 표시합니다. 기본값은 y입니다. 메모: 64비트 컴퓨터에서는 32비트 및 Sn.exe64비트 인스턴스 모두에서 이 매개 변수를 설정해야 합니다.
-q[uiet] 자동 모드를 지정합니다. 는 성공 메시지 표시를 표시하지 않습니다.
-R[a] assembly infile 이전에 서명되었거나 지연 서명된 어셈블리에 키 쌍을 인파일로 다시 서명합니다.

-Ra를 사용하는 경우 어셈블리의 모든 파일에 대해 해시가 다시 계산됩니다.
-Rc[a] assembly container 컨테이너의 키 쌍을 사용하여 이전에 서명되었거나 지연 서명된 어셈블리에 다시 서명 합니다.

-Rca를 사용하는 경우 어셈블리의 모든 파일에 대해 해시가 다시 계산됩니다.
-Rh assembly 어셈블리의 모든 파일에 대한 해시를 다시 계산합니다.
-t[p] infile infile에 저장된 공개 키의 토큰을 표시합니다. infile의 내용은 -p를 사용하여 키 쌍 파일에서 이전에 생성된 공개 키여야 합니다. -t[p] 옵션을 사용하여 키 쌍 파일에서 직접 토큰을 추출하지 마세요.

Sn.exe 공개 키의 해시 함수를 사용하여 토큰을 계산합니다. 공간을 절약하기 위해 공용 언어 런타임은 강력한 이름을 가진 어셈블리에 대한 종속성을 기록할 때 다른 어셈블리에 대한 참조의 일부로 매니페스트에 공개 키 토큰을 저장합니다. -tp 옵션은 토큰 외에도 공개 키를 표시합니다. 특성이 AssemblySignatureKeyAttribute 어셈블리에 적용된 경우 토큰은 ID 키에 대한 것이며 해시 알고리즘의 이름과 ID 키가 표시됩니다.

이 옵션은 어셈블리 서명을 확인하지 않으며 트러스트 결정을 내리는 데 사용하면 안 됩니다. 이 옵션은 원시 공개 키 토큰 데이터만 표시합니다.
-T[p] assembly 어셈블리에 대한 공개 키 토큰을 표시합니다. 어셈블리는 어셈블리 매니페스트를 포함하는 파일의 이름이어야 합니다.

Sn.exe 공개 키의 해시 함수를 사용하여 토큰을 계산합니다. 공간을 절약하기 위해 런타임은 강력한 이름을 가진 어셈블리에 대한 종속성을 기록할 때 다른 어셈블리에 대한 참조의 일부로 매니페스트에 공개 키 토큰을 저장합니다. -Tp 옵션은 토큰 외에도 공개 키를 표시합니다. 특성이 AssemblySignatureKeyAttribute 어셈블리에 적용된 경우 토큰은 ID 키에 대한 것이며 해시 알고리즘의 이름과 ID 키가 표시됩니다.

이 옵션은 어셈블리 서명을 확인하지 않으며 트러스트 결정을 내리는 데 사용하면 안 됩니다. 이 옵션은 원시 공개 키 토큰 데이터만 표시합니다.
-TS assembly infile 서명되거나 부분적으로 서명된 어셈블리파일에서 키 쌍으로 테스트 서명합니다.
-TSc assembly container 키 컨테이너 컨테이너의 키 쌍을 사용하여 서명되거나 부분적으로 서명된 어셈블리를 테스트 서명합니다.
-v assembly 어셈블리에서 강력한 이름을 확인합니다. 어셈블리는 어셈블리 매니페스트를 포함하는 파일의 이름입니다.
-vf assembly 어셈블리에서 강력한 이름을 확인합니다. -v 옵션과 달리 -vf-Vr 옵션을 사용하여 사용하지 않도록 설정된 경우에도 확인을 강제로 수행합니다.
-Vk regfile.reg assembly [userlist] [infile] 인증 건너뛰기를 위해 지정된 어셈블리를 등록하는 데 사용할 수 있는 등록 항목(.reg) 파일을 만듭니다. -Vr 옵션에 적용되는 어셈블리 명명 규칙은 -Vk에도 적용됩니다. 사용자 목록파일 옵션에 대한 자세한 내용은 -Vr 옵션을 참조하세요.
-Vl 이 컴퓨터에서 강력한 이름 확인을 위한 현재 설정을 나열합니다.
-Vr assembly [userlist] [infile] 확인을 건너뛰기 위해 어셈블리 를 등록합니다. 필요에 따라 건너뛰기 확인이 적용되어야 하는 쉼표로 구분된 사용자 이름 목록을 지정할 수 있습니다. 수신을 지정하는 경우 확인은 계속 사용하도록 설정되지만, 파일의 공개 키는 확인 작업에 사용됩니다. *, strongname 형식으로 어셈블리를 지정하여 모든 어셈블리를 지정된 강력한 이름으로 등록할 수 있습니다. strongname의 경우 공개 키의 토큰화된 형식을 나타내는 16진수 문자열을 지정합니다. 공개 키 토큰을 표시하려면 -t-T 옵션을 참조하세요. 주의: 개발 중에만 이 옵션을 사용합니다. 확인 건너뛰기 목록에 어셈블리를 추가하면 보안 취약성이 발생합니다. 악의적인 어셈블리는 id를 위조하기 위해 건너뛰기 확인 목록에 추가된 어셈블리의 완전히 지정된 어셈블리 이름(어셈블리 이름, 버전, 문화권 및 공개 키 토큰)을 사용할 수 있습니다. 이렇게 하면 악의적인 어셈블리도 확인을 건너뛸 수 있습니다.
-Vu assembly 확인을 건너뛰기 위해 어셈블리 를 등록 취소합니다. -Vr에 적용되는 어셈블리 명명에 대한 동일한 규칙이 -Vu에 적용됩니다.
-Vx 모든 확인 건너뛰기 항목을 제거합니다.
-? 도구에 대한 명령 구문 및 옵션을 표시합니다.

비고

모든 Sn.exe 옵션은 대/소문자를 구분하며 도구에서 인식할 수 있도록 표시된 대로 정확하게 입력해야 합니다.

비고

-R-Rc 옵션은 지연 서명된 어셈블리에 유용합니다. 이 시나리오에서는 퍼블릭 키만 컴파일 시간에 설정되었으며 프라이빗 키가 알려지면 나중에 서명이 수행됩니다.

비고

레지스트리와 같은 보호된 리소스에 쓰는 매개 변수(예: -Vr) 의 경우 관리자 권한으로 SN.exe 실행합니다.

강력한 이름 도구는 퍼블릭/프라이빗 키 쌍이 알고리즘 식별자를 사용하여 AT_SIGNATURE 생성된다고 가정합니다. 알고리즘을 사용하여 생성된 퍼블릭/프라이빗 키 쌍은 AT_KEYEXCHANGE 오류를 생성합니다.

예시

다음 명령은 새 임의 키 쌍을 만들고 저장합니다 keyPair.snk.

sn -k keyPair.snk

다음 명령은 강력한 이름 CSP의 컨테이너 MyContainer 에 키를 keyPair.snk 저장합니다.

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

참고하십시오