C# 如何在没有使用.NET的外部库或工具的情况下,以编程方式将带有时间戳的Authenticode数字签名应用于.NET程序集?
我必须编写一个.NET应用程序,该应用程序应可导出到.NET Framework 4.0.x、.NET Standard 2.0和.NET Core 2.2,该应用程序能够使用带有C# 如何在没有使用.NET的外部库或工具的情况下,以编程方式将带有时间戳的Authenticode数字签名应用于.NET程序集?,c#,.net,vb.net,code-signing,authenticode,C#,.net,Vb.net,Code Signing,Authenticode,我必须编写一个.NET应用程序,该应用程序应可导出到.NET Framework 4.0.x、.NET Standard 2.0和.NET Core 2.2,该应用程序能够使用带有X509Certificate2对象的Authenticode“格式”对.NET程序集(EXE、DLL)进行签名 到目前为止,我已经找到了利用该应用程序的解决方案,或者。这两种方法都不符合项目要求。程序集可以导出到第一段中提到的目标,但不能使用与Windows XP及以上版本不同的操作系统,也不能使用Windows X
X509Certificate2
对象的Authenticode“格式”对.NET程序集(EXE、DLL)进行签名
到目前为止,我已经找到了利用该应用程序的解决方案,或者。这两种方法都不符合项目要求。程序集可以导出到第一段中提到的目标,但不能使用与Windows XP及以上版本不同的操作系统,也不能使用Windows XP及以上版本的非桌面安装
我知道如何简单地使用.NET Framework/Standard/Core托管代码为blob创建签名,但简单地将签名附加到程序集将破坏整个程序集,因为没有Authenticode标记
是否有任何关于格式设计的Authenticode文档,以便我可以使用托管代码重新实现该格式?Authenticode标准中包含的时间戳如何
或者已经有了托管解决方案,而我只是还没有找到它
应用程序必须用VB.NET或C#编写。因此,欢迎对这两种语言进行提示。什么部分不适用于SignTool解决方案?我不知道.NET标准/核心,但SignTool应该适用于大多数Windows系统上的本机应用程序和.NET Framework应用程序(我曾在我的一个应用程序中使用过它,它适用于Windows 7和10)。@VisualIncent:SignTool使用
SignerSignEx
API(相同的APICryptoUIWizDigitalSign
使用)。从文档中可以看出,SignerSignEx
仅适用于启用“桌面体验”功能的Microsoft Windows XP SP3及更高版本(非控制台安装)。我需要能够从(不适用于)MacOSX、Linux和Windows(仅控制台安装)签署.NET程序集。。。这就解释了为什么您希望自己实现它(尽管SignTool可以在任何Windows安装上运行,而不仅仅是XP)。我不知道有任何关于authenticode的文档,但很明显,它可以在Mac和Linux(可能还有Windows)上使用。