NuGet パッケージに署名する

署名付きのパッケージだと、コンテンツの整合性の検証チェックが可能になるため、コンテンツを改ざんから保護できます。 また、パッケージの署名は、パッケージの実際の発行元を示す唯一のソースであり、コンシューマー向けにパッケージの信頼性を強化します。 このガイドは、既にパッケージが作成済みであること前提にしています。

コード署名証明書を取得する

有効な証明書は、次のような公的証明機関から取得できます。

Windows から信頼されている証明機関の全一覧は、http://aka.ms/trustcertpartners から入手できます。

テスト目的には、自己発行した証明書を使用できます。 ただし、NuGet.org では自己発行した証明書で署名されたパッケージは許可されていません。詳細については、テスト証明書の作成に関するページを参照してください

証明書ファイルをエクスポートする

  • 証明書のエクスポート ウィザードを使用すると、既存の証明書をバイナリ DER 形式にエクスポートできます。

    証明書のエクスポート ウィザード

  • 証明書は、Export-Certificate の PowerShell コマンドを使用してもエクスポートできます。

パッケージに署名する

dotnet nuget sign を使用してパッケージに署名します (.NET 6.0.100 SDK 以降が必要)。

dotnet nuget sign MyPackage.nupkg --certificate-path <PathToTheCertificate> --timestamper <TimestampServiceURL>

または

nuget sign を使用してパッケージに署名します (nuget.exe 4.6.0 以降が必要)。

nuget sign MyPackage.nupkg -CertificatePath <PathToTheCertificate> -Timestamper <TimestampServiceURL>

ヒント

証明書プロバイダーから、上記の省略可能な引数 Timestamper に使用できるタイムスタンプ サーバーの URL が提供されることがよくあります。 プロバイダーのドキュメントを参照するか、そのサービスの URL のサポートに問い合わせてください。

  • 証明書には、証明書ストアで入手できるものを使用するか、ファイルの証明書を使用できます。 nuget の sign の CLI リファレンスを参照してください。
  • 署名証明書が期限切れになったときに署名の有効な状態を維持するには、署名済みパッケージにタイムスタンプが含まれている必要があります。 そうでない場合は、署名操作で警告が生成されます。
  • 特定のパッケージの署名の詳細を表示するには、nuget verify を使用します。

NuGet.org に証明書を登録する

署名されたパッケージを発行するには、まず NuGet.org に証明書を登録する必要があります。この証明書は、DER 形式の .cer ファイルである必要があります。

  1. NuGet.org にサインインします。
  2. [Account settings] に移動します (または、証明書を組織アカウントで登録するには [Manage Organization] > [Edit Organization] に移動します)。
  3. [Certificates] セクションを展開し、[Register new] を選択します。
  4. 前にエクスポートした証明書ファイルを参照し選択します。 登録済みの証明書

Note

  • 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 を実行し、証明書ストアを開きます。

警告

NuGet.org では、自己発行した証明書で署名されたパッケージは許可されていません。

NuGet.org でパッケージの署名要件を管理する

  1. NuGet.org にサインインします。

  2. [https://resources.azure.com](Manage Packagesパッケージ署名者を設定する) に移動します

  • ご自分がパッケージの唯一の所有者である場合、ご自分で署名する必要があります。つまり、登録済みの任意の証明書を使用してパッケージに署名し、NuGet.org に公開します。

  • パッケージの所有者が複数いる場合、パッケージの署名には既定で "すべて" の所有者の証明書を使用できます。 ご自分がパッケージの共同所有者である場合、必要な署名者として "すべて" を自分または他の任意の共同所有者でオーバーライドできます。 証明書の登録を行っていない所有者を作成した場合、署名付きでないパッケージが許可されます。

  • 同様に、証明書の登録を 1 人の所有者は行っており、別の所有者は行っていないパッケージで、既定の "すべて" オプションが選択されている場合、NuGet.org では、所有者の 1 人が登録した証明書が使用された署名付きパッケージまたは、署名付きでないパッケージのいずれかを許可します (これは、所有者のうちの 1 人が証明書の登録を行っていないためです)。