--certificate-fingerprint选项(dotnet nuget sign命令中)或CertificateFingerprint选项(NuGet.exe sign命令中)的值无效。 值必须是 SHA-256、SHA-384 或 SHA-512 证书指纹(以十六进制为单位)。
此警告提升为 .NET 10 SDK 中的错误,并将在 .NET 10 版本前后 NuGet.exe 提升为错误。
问题
.NET 9 和 NuGet.exe 6.12 开始,当将 SHA-1 证书指纹传递给签名命令时会引发 NU3043 警告。 SHA-1 被认为不安全,不应再使用。
解决方案
若要解决此警告,请确保为 --certificate-fingerprint 选项(dotnet nuget sign 命令中)或 CertificateFingerprint 选项(NuGet.exe sign 命令中)提供有效的 SHA-256、SHA-384 或 SHA-512 证书指纹(以十六进制为单位)。
可以使用以下脚本计算证书的 SHA-2 系列哈希。
PowerShell
若要使用该脚本,需要将证书保存到本地文件夹。
$certificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($certPath)
$stream = [System.IO.MemoryStream]::new($certificate.RawData)
Try
{
(Get-FileHash -Algorithm SHA256 $stream).Hash
}
Finally
{
$stream.Dispose()
$certificate.Dispose()
}
OpenSSL (Linux/macOS)
如果证书采用 PEM 或 CRT 格式:
openssl x509 -in path/to/certificate -outform der | sha256sum
如果证书已采用 DER 格式:
sha256sum path/to/certificate
小窍门
对于 SHA-384 或 SHA-512,根据需要将 sha256sum 替换为 sha384sum 或 sha512sum。