Windows 服务器 2016/2019 return Owin.dll 上的 Authenticode 签名不正确

Windows Server 2016/2019 incorrectly return Authenticode signature on Owin.dll

Owin.dll,Owin package on Nuget.org, does not have an Authenticode signature. However, on Windows Server 2016 and Windows Server 2019, Get-AuthenticodeSignature (and sigcheck.exe) 中的程序集错误地报告 Owin.dll 具有 Authenticode 签名。

如果您部署 Windows 服务器 VM 和 运行 此代码,它将 return 不同的签名和时间戳证书(我只在 Azure 中这样做):


> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
> Invoke-WebRequest "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" -OutFile NuGet.exe
> .\NuGet.exe install owin -o .
> Get-AuthenticodeSignature .\Owin.1.0\lib\net40\Owin.dll | Format-List

在 Windows Server 2019 上,它 return 是一个带有指纹 AE9C1AE54763822EEC42474983D8B635116C8452 和 TimestamperCertificate 指纹 893ED0E4D032C3855D5D2296B2DE2DD1AF=893ED0E4D032C3855D5D2296B2DE2DD1AF=895 的签名者证书

在 Windows Server 2016 上,它 return 是一个带有指纹 E85459B23C232DB3CB94C7A56D47678F58E8E51E 和 TimestamperCertificate 指纹 CFC3E3018EA65666DCE484FC7016EB42D1F1F 的 SignerCertificate。[=108A9]

其他证书元数据表明这些实际上是来自 Microsoft 的证书。

这是怎么回事?为什么这个特定的程序集在 Windows 的这些特定版本中以这种方式表现?

虽然签名不是 Owin.dll 本身的一部分,但 Windows 服务器有一个“安全目录”(在 %SystemRoot%\System32\CatRoot 下),它通过 name/hash。安全目录由 Microsoft 签名,它是 Get-AuthenticodeSignature 返回的安全目录的签名证书。实际上,它只是一个“分离的”Authenticode 签名,而不是嵌入到 .dll 中。