署名されたパッケージを使用すると、コンテンツの整合性検証チェックを行うことができます。これにより、コンテンツの改ざんに対する保護が提供されます。 パッケージ署名は、パッケージの実際の起源に関する単一の情報源としても機能し、消費者のパッケージの信頼性を強化します。 このガイドでは、パッケージが既 に作成されていることを前提としています。
コード署名証明書を取得する
有効な証明書は、次のようなパブリック証明機関から取得できます。
Windows によって信頼されている証明機関の完全な一覧は、 http://aka.ms/trustcertpartnersから取得することもできます。
自己発行の証明書は、テスト目的で使用できます。 ただし、自己署名証明書を使用して署名されたパッケージは、NuGet.org では受け入れまれません。テスト証明書の作成の詳細
証明書ファイルをエクスポートする
証明書がハードウェア トークンに格納されている場合は、証明書をエクスポートしないでください。 代わりに、オプション
--certificate-fingerprint <SHA-2fingerprint>を使用して SHA-2 ファミリ証明書の指紋 (拇印) を指定します (--certificate-path <PathToTheCertificate>を置き換えます)。証明書のエクスポート ウィザードを使用して、既存の証明書をバイナリ DER 形式にエクスポートできます。
Export-Certificate PowerShell コマンドを使用して証明書をエクスポートすることもできます。
パッケージに署名する
dotnet nuget 記号を使用してパッケージに署名します (.NET 6.0.100 SDK 以降が必要)。
dotnet nuget sign MyPackage.nupkg --certificate-path <PathToTheCertificate> --timestamper <TimestampServiceURL>
又は
nuget 記号を使用してパッケージに署名します (nuget.exe 4.6.0 以降が必要)。
nuget sign MyPackage.nupkg -CertificatePath <PathToTheCertificate> -Timestamper <TimestampServiceURL>
ヒント
証明書プロバイダーは、多くの場合、上記の省略可能な引数 Timestamper 使用できるタイムスタンプ サーバーの URL も提供します。 プロバイダーのドキュメントや、そのサービス URL のサポートを参照してください。
- 証明書ストアで使用可能な証明書を使用することも、ファイルの証明書を使用することもできます。 nuget 記号については、CLI リファレンスを参照してください。
- 署名済みパッケージには、署名証明書の有効期限が切れたときに署名が有効なままであることを確認するためのタイムスタンプを含める必要があります。 それ以外の場合、署名操作によって 警告が生成されます。
- nuget verify を使用して、特定のパッケージの署名の詳細を確認できます。
NuGet.org に証明書を登録する
署名済みパッケージを発行するには、まず証明書を NuGet.org に登録する必要があります。バイナリ DER 形式の .cer ファイルとして証明書が必要です。
- NuGet.org にサインインします。
-
Account settingsに移動します (または、証明書を組織アカウントに登録する場合はManage Organization>Edit Organization)。 - [
Certificates] セクションを展開し、[Register new] を選択します。 - 先ほどエクスポートした certficate ファイルを参照して選択します。
注
- 1 人のユーザーが複数の証明書を送信でき、同じ証明書を複数のユーザーが登録できます。
- ユーザーが 1 つ以上の証明書を登録している間は、すべてのパッケージ申請にいずれかの証明書で署名する 必要があります 。 NuGet.org でのパッケージの署名要件の管理に関するページを参照してください
- ユーザーは、アカウントから登録済みの証明書を削除することもできます。 証明書が削除されると、その証明書で署名された新しいパッケージは送信時に失敗します。 既存のパッケージは影響を受けません。
パッケージを発行する
これで、パッケージを NuGet.org に発行する準備ができました。「 パッケージの発行」を参照してください。
テスト証明書を作成する
自己発行の証明書は、テスト目的で使用できます。 自己発行の証明書を作成するには、 New-SelfSignedCertificate PowerShell コマンドを使用します。
New-SelfSignedCertificate -Subject "CN=NuGet Test Developer, OU=Use for testing purposes ONLY" `
-FriendlyName "NuGetTestDeveloper" `
-Type CodeSigning `
-KeyUsage DigitalSignature `
-KeyLength 2048 `
-KeyAlgorithm RSA `
-HashAlgorithm SHA256 `
-Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" `
-CertStoreLocation "Cert:\CurrentUser\My"
このコマンドは、現在のユーザーの個人用証明書ストアで使用できるテスト証明書を作成します。
certmgr.mscを実行して証明書ストアを開き、新しく作成された証明書を表示できます。
Warnung
NuGet.org は、自己署名証明書で署名されたパッケージを受け入れません。
NuGet.org でパッケージの署名要件を管理する
NuGet.org にサインインします。
Manage Packages
に移動する
パッケージの唯一の所有者である場合は、必要な署名者になります。つまり、登録済みの証明書のいずれかを使用して、パッケージに署名し、NuGet.org に発行できます。
パッケージに複数の所有者が存在する場合、既定では、"Any" 所有者の証明書を使用してパッケージに署名できます。 パッケージの共同所有者は、自分または他の共同所有者と共に "Any" をオーバーライドして、必要な署名者にすることができます。 証明書が登録されていない所有者を作成すると、署名されていないパッケージが許可されます。
同様に、1 人の所有者が証明書を登録し、別の所有者が証明書を登録していないパッケージに対して既定の "Any" オプションが選択されている場合、NuGet.org は、いずれかの所有者によって登録された署名付きの署名付きパッケージまたは署名されていないパッケージを受け入れます (所有者の 1 人に証明書が登録されていないため)。