コード署名
すべてのEPPlusリリースは、GlobalSignからEPPlus Software ABに発行されたコード署名証明書でデジタル署名されています。これはすべての分散アセンブリおよびNuGetパッケージ自体に適用され、使用しているものが当社によって構築・公開されたかどうかを独立して検証できます。
なぜ私たちがリリースに署名するのか
ソフトウェアサプライチェーン攻撃――攻撃者が出版社とエンドユーザーの間でパッケージを改ざんする攻撃――は、ますます大きな脅威となっています。デジタル署名は、ダウンロードしたファイルが私たちが作成し公開したものと同一であることを暗号学的に保証します。また、発行者の身元も確認できます。署名は信頼できる証明書機関によってEPPlus Software ABに発行された証明書の保有者によってのみ作成された可能性があります。署名後にファイルが改変された場合、または当事務所が署名していない場合は、検証に失敗します。
署名されているもの
EPPlusリリースに含まれるすべてのアセンブリは、サポートされているすべてのターゲットフレームワークで署名されます。NuGetパッケージはパッケージレベルの署名として別途署名され、パッケージの内容全体をカバーします。
特定のリリースに含まれるアセンブリとターゲットフレームワークの正確なセットは、そのリリースの ソフトウェア材料表 に記載されています。
証明書
署名証明書は、グローバルに信頼されている認証機関であるGlobalSignによって発行されます。証明書はハードウェアでバックアップされた鍵ストアに安全に保存され、自動リリースパイプラインの一部としてのみアクセスされます。秘密鍵は決して安全な環境から出ることはありません。
| 配備先 | EPPlus Software AB |
|---|---|
| 発行元 | GlobalSign GCC R45 CodeSigning CA 2020 |
| ダイジェストアルゴリズム | SHA-256 |
| タイムスタンプの権限 | GlobalSign TSA for Advanced - G4 |
すべての署名にはGlobalSignからの信頼できるタイムスタンプが含まれています。これにより、署名が有効期間内に作成された場合、署名が更新された後も認証可能な状態が保たれます。上記の証明書詳細は現在の署名証明書を反映しており、発行者やタイムスタンプ認証機関は更新時に変更される場合があります。
NuGetリポジトリのカウンターシグネチャー
自社の著者署名に加え、パッケージが公開されると自動的にリポジトリのカウンターシグネ NuGet.org も追加されます。このカウンターサインは NuGet.org によって発行され、EPPlusパッケージの登録所有者によって NuGet.org にアップロードされたことを確認しています。パッケージを確認すると、EPPlus Software ABの著者署名と NuGet.org のリポジトリのカウンターシグネーションの両方が表示されます。
EPPlusパッケージの登録所有者は独立して確認できます。 nuget.org/packages/EPPlus で。
検証が失敗した場合
失敗した検証とは、署名後にファイルが変更されている、署名が欠落している、または証明書チェーンが信頼できないことを意味します。検証に失敗するパッケージやアセンブリは使わないでください。公開されたEPPlusリリースが改ざんされたと考える理由がある場合は、直ちに報告してください。
お問い合わせ方法については、脆弱性 開示ポリシー をご覧ください。
ご自身でリリースを確認しましょう
標準ツールを使えば、EPPlusリリースの署名を独立して検証でき、私たちに頼る必要はありません。
NuGetパッケージの検証
EPPlusのリリースを最も簡単に検証する方法は、.NET CLIを使ってNuGetパッケージ署名を確認することです。これはWindows、Linux、macOSで動作します。
dotnet nuget verify EPPlus.<version>.nupkg --verbosity detailed
認証されたパッケージは、EPPlus Software ABの著者署名と NuGet.org のリポジトリのカウンターシグネーションの両方を表示します。
X.509 certificate chain validation will use the default trust store selected by .NET for code signing.
X.509 certificate chain validation will use the default trust store selected by .NET for timestamping.
Verifying EPPlus.<version>
Signature Hash Algorithm: SHA256
Signature type: Author
Verifying the author primary signature with certificate:
Subject Name: CN=EPPlus Software AB, O=EPPlus Software AB, L=Stockholm, C=SE
Issued by: CN=GlobalSign GCC R45 CodeSigning CA 2020, O=GlobalSign nv-sa, C=BE
Signature type: Repository
Service index: https://api.nuget.org/v3/index.json
Owners: EPPlusSoftware, jankallman, swmal
Successfully verified package 'EPPlus.<version>'.
アセンブリの検証
Windowsでは、個別アセンブリをPowerShellで直接検証することも可能です。これにより、暗号署名と証明書の信頼チェーンの両方がWindowsの信頼ストアを用いて検証されます。
Get-AuthenticodeSignature "path\to\EPPlus.dll" | Format-List *
有効な署名にはステータス:有効と、GlobalSignによってEPPlus Software ABに発行された署名証明書が表示されます。
SignerCertificate : [Subject]
CN=EPPlus Software AB, O=EPPlus Software AB, L=Stockholm, C=SE
[Issuer]
CN=GlobalSign GCC R45 CodeSigning CA 2020, O=GlobalSign nv-sa, C=BE
...
Status : Valid
StatusMessage : Signature verified.
SignatureType : Authenticode
アセンブリレベルでのPowerShellによる検証はWindowsでのみ利用可能です。LinuxおよびmacOSでは、上記の通りdotnet nuget verifyを使ってNuGetパッケージを検証することを推奨しており、これはすべてのプラットフォームで動作します。