署名付きパッケージ

NuGet 4.6.0+および Visual Studio 2017バージョン 15.6 以降

NuGet パッケージには、改ざんされたコンテンツに対する保護を提供するデジタル署名を含めることができます。 この署名は、パッケージの実際の配信元にも信頼性の証明を追加する X.509 証明書から生成されます。

署名されたパッケージは、最も強力なエンドツーエンドの検証を提供します。 NuGet署名には、2 つの種類があります。

  • 署名を作成。 作成者署名は、パッケージが配信されるリポジトリや転送方法に関係なく、作成者がパッケージに署名してからパッケージが変更されていないことを保証します。 さらに、編集者署名パッケージは、署名証明書を事前に登録する必要があるため、nuget.org 発行パイプラインに追加の認証メカニズムを提供します。 その他情報は証明書登録をご覧ください。
  • リポジトリの署名 リポジトリ署名は、署名された元のリポジトリとは異なる場所からパッケージが取得された場合でも、作成者が署名されているかどうかに関係なく、リポジトリ内のすべてのパッケージに整合性を保証します。

作成者署名済みパッケージの作成の詳細については、「署名パッケージnuget 署名 コマンド」を参照してください。 dotnet nuget verifyまたはnuget verify コマンドを使用して、パッケージの署名を確認できます。

重要

作成者署名パッケージは現時点では Windows 上の nuget.exe でのみ対応しています。 ただし、nuget.org にアップロードされたすべてのパッケージは自動的にリポジトリに署名されます。

証明書の要件

パッケージ署名にはコード署名証明書が必要です。これは、目的に対 id-kp-codeSigning して有効な特殊な種類の証明書です [RFC 5280 セクション 4.2.1.12]。 さらに、証明書の RSA 公開鍵の長さが 2048 ビット以上である必要があります。

タイムスタンプの要件

署名済みパッケージには、パッケージ署名証明書の有効期間を超えて署名の有効性を確保するために、RFC 3161 タイムスタンプを含める必要があります。 タイムスタンプの署名に使用する証明書は、[RFC 5280 セクション 4.2.1.12] の目的で有効id-kp-timeStampingである必要があります。 さらに、証明書の RSA 公開鍵の長さが 2048 ビット以上である必要があります。

その他の技術的な詳細については、パッケージの署名技術仕様 (GitHub) を参照してください。

NuGet.org での署名の要件

nuget.org には、署名済みパッケージを受け入れるための追加要件があります。

  • プライマリ署名は作成者署名である必要があります。
  • プライマリ署名には、有効なタイムスタンプが 1 つ必要です。
  • 作成者署名とそのタイムスタンプ署名の両方の X.509 証明書:
    • RSA 公開キーが 2048 ビット以上である必要があります。
    • nuget.org でのパッケージの検証時に、現在の UTC 時間あたりの有効期間内である必要があります。
    • Windows で既定で信頼されている信頼されたroot機関にチェーンする必要があります。 自己署名証明書で署名されたパッケージは拒否されます。
    • 次の目的で有効である必要があります。
      • 作成者署名証明書は、コード署名に対して有効である必要があります。
      • タイムスタンプ証明書はタイムスタンプに対して有効である必要があります。
    • 署名時に取り消してはなりません。 (これは送信時に認識できない可能性があるため、定期的に nuget.org チェック失効状態)。