我正在尝试检索清单签署的日期,因为我需要将日期与证书的到期日期进行比较.清单签名标记似乎不包含时间戳.
我正在使用System.Security.Cryptography.Xml.SignedXml来加载清单文件.我无法确定我需要使用哪种方法来提取清单签署的日期.
清单文件本身没有明文日期,所以我假设它嵌入了签名值或其他标签中?
我采取了错误的做法吗?
我正在编写一个汇编信息应用程序,用于我们的软件构建过程,并尝试从已签名的.Net程序集中读取数字签名信息.
我想在我的C#代码中执行Windows资源管理器可以通过右键单击已签名的程序集并选择"数字签名"选项卡然后单击"详细信息"按钮来执行的操作.例如


有没有人知道如何在C#中以编程方式执行此操作?我目前正在使用Mono Cecil库从程序集中获取其余信息.非常感谢您的帮助.
我编写了一个C#.NET应用程序,它使用流行的非托管DLL文件来实现其部分功能.使用System.Runtime.InteropServices中的标准DllImport导入DLL.
但是,遗憾的是,我的应用程序(以及大多数使用DllImport的.NET应用程序)容易受到DLL劫持攻击.即攻击者可以将导入的DLL的恶意副本放在与我的应用程序打开的任何文件相同的目录中.这可以使攻击者完全控制用户的计算机.
为了缓解此漏洞,我想在导入之前验证DLL文件是否已正确签名(使用默认的Authenticode).我知道签名可以使用像sigcheck.exe这样的工具进行验证,但这对我来说不是一个可行的解决方案,因为我需要在我的C#代码中完成.
所以我的问题很简单:在加载DLL之前,如何从我的托管C#代码中验证DLL是否具有有效的Authenticode签名?
限制:
失败的方法:
简短的问题
如何从可执行文件(.EXE/.DLL)获取有关多个代码签名证书的信息?
预期答案
最终接受的答案应该提出一种方法来获得C#中的所有证书.概念/伪代码是可以的,我不指望你写完整的源代码.
有关建议工具的中间答案,请参阅Security.StackExchange上的问题.
很长的问题
我正在研究是否可以在插件(.DLL)上使用多个代码签名证书来检查它是否已经过官方测试.这是程序:
似乎可以使用第二次签署DLL
signtool /v /f <pfx> /as <dll>
Run Code Online (Sandbox Code Playgroud)
这可能有用的迹象:
但是,有一些问题显示第二个签名:
X509Certificate.CreateFromSignedFile()方法只能返回一个证书目前我实际上是在EXE文件而不是DLL文件上尝试我的代码,但这应该不重要.EXE已使用受信任的根证书和时间戳签名.第二个签名是使用我自己的证书创建的,遵循这些步骤,目前没有时间戳.
在问这个问题之前我做了些什么:
到目前为止我发现的唯一相关问题是如何使用时间戳正确地进行双重签名,但它没有答案.
我正在尝试编写一个C#程序来验证exe的数字签名.exe是用authenticode证书签名的,我想检测篡改.
我已经能够创建一个SignedCms实例,如下所述:从.NET中的Authenticode签名文件中获取时间戳
我假设SignedCms.CheckSignature可以做到这一点,但是这个方法永远不会引发异常......即使不是当我修改exe的某些部分时......
c# ×5
.net ×3
authenticode ×2
code-signing ×1
dll ×1
dllimport ×1
security ×1
signed ×1
signtool ×1
xml ×1