NuGet 서명된 패키지 확인

NuGet 패키지에 서명하여 패키지 소비자가 패키지의 신뢰성과 무결성의 유효성을 검사할 수 있도록 할 수 있습니다. 확인을 사용하도록 설정하면 .NET은 패키지 복원 작업 중에 서명된 패키지를 확인합니다. 이러한 확인 작업은 패키지 고객이 프로젝트를 빌드하거나 실행할 때 자동으로 발생합니다.

NuGet 패키지 서명은 X.509 인증서를 기준으로 하며, 서명된 패키지 확인을 위한 필수 조건은 코드 서명 및 타임스탬프 적용 모두에 유효한 인증서 루트 저장소입니다.

.NET 6.0.400 SDK부터 NuGet은 .NET SDK에 포함된 인증서 번들을 사용하여 적합한 시스템 루트 저장소를 사용할 수 없는 서명된 패키지를 확인합니다. 이러한 번들은 Microsoft 신뢰할 수 있는 루트 프로그램에서 공급되며 Windows의 루트 저장소와 동일한 코드 서명 및 타임스탬프 적용 인증서를 포함합니다. 이러한 인증서 번들은 NuGet.org에서 패키지를 확인하는 데 필요한 모든 루트 인증서를 포함해야 합니다.

signverify와 같은 일부 NuGet 명령은 항상 서명된 패키지 확인을 수행합니다.

각 운영 체제에 대한 다음 섹션에서는 다음을 설명합니다.

  • 복원 작업 중 암시적 확인이 기본적으로 사용되는 경우
  • 사용하도록 설정하는 방법
  • 사용되는 루트 저장소

Windows

패키지 복원 작업 중에는 확인이 항상 사용하도록 설정됩니다.

NuGet은 이미 범용 코드 서명 및 타임스탬프 적용을 지원하는 Windows의 기본 루트 저장소를 사용합니다. .NET SDK 인증서 번들은 사용되지 않습니다. 모든 서명된 패키지 확인 기능은 이 기능이 도입된 .NET SDK 버전의 Windows에서 지원됩니다.

Linux

Important

서명된 패키지 확인 기능이 .NET 5 SDK에 추가되었지만 해당 기능은 .NET 6.0.400 SDK까지 Linux에서 지원되지 않습니다. 6.0.400 이전의 .NET SDK 버전에서는 서명된 패키지 확인을 사용하지 마세요.

.NET 8 SDK 이전에는 패키지 복원 작업 중에 기본적으로 확인을 사용할 수 없습니다. 옵트인하려면 환경 변수 DOTNET_NUGET_SIGNATURE_VERIFICATIONtrue로 설정합니다.

.NET 8 SDK부터 확인은 기본적으로 사용하도록 설정됩니다. 옵트아웃하려면 환경 변수 DOTNET_NUGET_SIGNATURE_VERIFICATIONfalse로 설정합니다.

코드 서명 인증서 확인을 위해 NuGet은 먼저 다음 위치에서 인증서 번들을 검색합니다.

/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem

유효한 인증서 번들이 발견되면 NuGet은 코드 서명을 위해 .NET SDK의 인증서 번들보다 이를 먼저 사용합니다. .NET SDK의 인증서 번들과 최소한 동일한 루트 인증서 집합이 포함된 경우 NuGet 서명 패키지 확인이 성공해야 합니다. NuGet.org의 서명된 패키지에 사용된 것과 같은 루트 인증서가 부족한 경우 NuGet 서명 패키지 확인은 신뢰할 수 없는 상태로 실패합니다(NU3018 또는 NU3028을 통해). 이 인증서 번들에 루트 인증서를 추가하면 성공적인 확인이 가능해집니다. 그러나 이 인증서 번들은 시스템 전체 신뢰 저장소인 반면, .NET SDK 인증서 번들은 애플리케이션 전체 신뢰 저장소로 사용된다는 점에 유의해야 합니다.

위 위치에서 유효한 인증서 번들이 발견되지 않으면 NuGet은 코드 서명을 위해 .NET SDK의 인증서 번들을 사용하게 됩니다.

타임스탬프 인증서 확인을 위해 NuGet은 항상 타임스탬프용 .NET SDK의 인증서 번들을 사용합니다.

macOS

패키지 복원 작업 중에는 기본적으로 확인을 사용할 수 없습니다. 옵트인하려면 환경 변수 DOTNET_NUGET_SIGNATURE_VERIFICATIONtrue로 설정합니다. 그러나 확인을 사용하도록 설정하지 않는 것이 좋습니다. 자세한 내용은 NuGet/Home#11985NuGet/Home#11986을 참조하세요.

NuGet은 .NET SDK의 인증서 번들만 사용합니다.

Important

서명된 패키지 확인 기능이 .NET 5 SDK에 추가되었지만 해당 기능은 현재 macOS에서 지원되지 않습니다. 6.0.400 이전의 .NET SDK 버전에서는 서명된 패키지 확인을 사용하지 마세요. 기본적으로 사용하지 않도록 설정된 상태로 둡니다.

참고 항목