NuGet パッケージの署名Signing NuGet Packages

署名付きのパッケージは、コンテンツの整合性を検証し、コンテンツを改ざんから保護します。Signed packages allows for content integrity verification checks which provides protection against content tampering. また、パッケージの署名は、パッケージの実際の発行元を示す唯一のソースであり、コンシューマー向けにパッケージの信頼性を強化します。The package signature also serves as the single source of truth about the actual origin of the package and bolsters package authenticity for the consumer. このガイドは、既にパッケージが作成済みであること前提にしています。This guide assumes you have already created a package.

コード署名証明書を取得するGet a code signing certificate

有効な証明書は、SymantecDigiCertGo DaddyGlobal SignComodoCertum などの公的な証明機関から入手できます。Windows によって信頼される証明機関の全一覧は、http://aka.ms/trustcertpartners から入手できます。Valid certificates may be obtained from a public certificate authority such as Symantec, DigiCert, Go Daddy, Global Sign, Comodo, Certum, etc. The complete list of certification authorities trusted by Windows can be obtained from http://aka.ms/trustcertpartners.

テスト目的には、自己発行した証明書を使用できます。You can use self-issued certificates for testing purposes. ただし、NuGet.org では自己発行した証明書で署名されたパッケージは許可されていません。詳細については、テスト証明書の作成に関するページを参照してください。However, packages signed using self-issued certificates are not accepted by NuGet.org. Learn more about creating a test certificate

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

  • 証明書のエクスポート ウィザードを使用すると、既存の証明書をバイナリ DER 形式にエクスポートできます。You can export an existing certificate to a binary DER format by using the Certificate Export Wizard.

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

  • 証明書は、Export-Certificate の PowerShell コマンドを使用してもエクスポートできます。You can also export the certificate using the Export-Certificate PowerShell command.

パッケージに署名するSign the package

注意

nuget.exe 4.6.0 以降が必要です。Requires nuget.exe 4.6.0 or later. dotnet.exe のサポートは近日提供予定です - #7939dotnet.exe support is coming soon - #7939

nuget sign を使用してパッケージに署名するには、次を使用します。Sign the package using nuget sign:

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

ヒント

証明書プロバイダーから、上記の省略可能な引数 Timestamper に使用できるタイムスタンプ サーバーの URL が提供されることがよくあります。The certificate provider often also provides a timestamping server URL which you can use for the Timestamper optional argument show above. プロバイダーのドキュメントを参照するか、そのサービスの URL のサポートに問い合わせてください。Consult with your provider's documentation and/or support for that service URL.

  • 証明書には、証明書ストアで入手できるものを使用するか、ファイルの証明書を使用できます。You can use a certificate available in the certificate store or use a certificate from a file. nuget の sign の CLI リファレンスを参照してください。See CLI reference for nuget sign.
  • 署名証明書が期限切れになったときに署名の有効な状態を維持するには、署名済みパッケージにタイムスタンプが含まれている必要があります。Signed packages should include a timestamp to make sure the signature remains valid when the signing certificate has expired. そうでない場合は、署名操作で警告が生成されます。Else the sign operation will produce a warning.
  • 特定のパッケージの署名の詳細を表示するには、nuget verify を使用します。You can see the signature details of a given package using nuget verify.

NuGet.org に証明書を登録するRegister the certificate on NuGet.org

署名されたパッケージを発行するには、まず NuGet.org に証明書を登録する必要があります。この証明書は、DER 形式の .cer ファイルである必要があります。To publish a signed package, you must first register the certificate with NuGet.org. You need the certificate as a .cer file in a binary DER format.

  1. NuGet.org にサインインします。Sign in to NuGet.org.
  2. [Account settings] に移動します (または、証明書を組織アカウントで登録するには [Manage Organization] > [Edit Organziation] に移動します)。Go to Account settings (or Manage Organization > Edit Organziation if you would like to register the certificate with an Organization account).
  3. [Certificates] セクションを展開し、[Register new] を選択します。Expand the Certificates section and select Register new.
  4. 前にエクスポートした証明書ファイルを参照し選択します。Browse and select the certficate file that was exported earlier. 登録済みの証明書Registered Certificates

注:Note

  • 1 人のユーザーが複数の証明書を送信でき、複数のユーザーが同じ証明書を登録できます。One user can submit multiple certificates and the same certificate can be registered by multiple users.
  • ユーザーが証明書を登録した場合、以降送信されるすべてのパッケージはそのうちの 1 つの証明書で署名される必要がありますOnce a user has a certificate registered, all future package submissions must be signed with one of the certificates. NuGet.org でパッケージの署名要件を管理する」を参照してください。See Manage signing requirements for your package on NuGet.org
  • ユーザーはそのアカウントから登録済みの証明書を削除することもできます。Users can also remove a registered certificate from the account. 証明書を一度削除すると、その証明書を使用して署名された新しいパッケージの送信時に失敗します。Once a certificate is removed, new packages signed with that certificate will fail at submission. 既存のパッケージには影響はありません。Existing packages aren't affected.

パッケージを公開するPublish the package

これで NuGet.org にパッケージを公開する準備ができました。「パッケージを公開する」を参照してください。You are now ready to publish the package to NuGet.org. See Publishing packages.

テスト証明書を作成するCreate a test certificate

テスト目的には、自己発行した証明書を使用できます。You can use self-issued certificates for testing purposes. 自己発行の証明書を作成するには、New-SelfSignedCertificate PowerShell コマンドを使用します。To create a self-issued certificate, use the New-SelfSignedCertificate PowerShell command.

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" 

このコマンドにより、現在のユーザーの個人の証明書ストアにテスト証明書が作成されます。This command creates a testing certificate available in the current user's personal certificate store. 新規に作成された証明書を参照するには、certmgr.msc を実行し、証明書ストアを開きます。You can open the certificate store by running certmgr.msc to see the newly created certificate.

警告

NuGet.org では、自己発行した証明書で署名されたパッケージは許可されていません。NuGet.org does not accept packages signed with self-issued certificates.

NuGet.org でパッケージの署名要件を管理するManage signing requirements for your package on NuGet.org

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

  2. [Manage Packages] に移動します。 パッケージの署名者を構成するGo to Manage Packages Configure package signers

  • ご自分がパッケージの唯一の所有者である場合、ご自分で署名する必要があります。つまり、登録済みの任意の証明書を使用してパッケージに署名し、NuGet.org に公開します。If you are the sole owner of a package, you are the required signer i.e. you can use any of the registered certificates to sign and publish your packages to NuGet.org.

  • パッケージの所有者が複数いる場合、パッケージの署名には既定で "すべて" の所有者の証明書を使用できます。If a package has multiple owners, by default, "Any" owner's certificates can be used to sign the package. ご自分がパッケージの共同所有者である場合、必要な署名者として "すべて" を自分または他の任意の共同所有者でオーバーライドできます。As a co-owner of the package, you can override "Any" with yourself or any other co-owner to be the required signer. 証明書の登録を行っていない所有者を作成した場合、署名付きでないパッケージが許可されます。If you make an owner who does not have any certificate registered, then unsigned packages will be allowed.

  • 同様に、証明書の登録を 1 人の所有者は行っており、別の所有者は行っていないパッケージで、既定の "すべて" オプションが選択されている場合、NuGet.org では、所有者の 1 人が登録した証明書が使用された署名付きパッケージまたは、署名付きでないパッケージのいずれかを許可します (これは、所有者のうちの 1 人が証明書の登録を行っていないためです)。Similarly, if the default "Any" option is selected for a package where one owner has a certificate registered and another owner does not have any certificate registered, then NuGet.org accepts either a signed package with a signature registered by one of its owners or an unsigned package (because one of the owners does not have any certificate registered).