代码签名

每个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。

你可以在 nuget.org/packages/EPPlus 上独立验证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包,该方法适用于所有平台。