相关疑难解决方法(0)

如何提取C#清单签署的日期

我正在尝试检索清单签署日期,因为我需要将日期与证书的到期日期进行比较.清单签名标记似乎不包含时间戳.

我正在使用System.Security.Cryptography.Xml.SignedXml来加载清单文件.我无法确定我需要使用哪种方法来提取清单签署的日期.

清单文件本身没有明文日期,所以我假设它嵌入了签名值或其他标签中?

我采取了错误的做法吗?

c# xml

9
推荐指数
1
解决办法
388
查看次数

如何从已签名的.Net程序集中读取数字签名信息?

我正在编写一个汇编信息应用程序,用于我们的软件构建过程,并尝试从已签名的.Net程序集中读取数字签名信息.

我想在我的C#代码中执行Windows资源管理器可以通过右键单击已签名的程序集并选择"数字签名"选项卡然后单击"详细信息"按钮来执行的操作.例如

Windows 7资源管理器可以通过右键单击文件属性来完成

数字签名细节

有没有人知道如何在C#中以编程方式执行此操作?我目前正在使用Mono Cecil库从程序集中获取其余信息.非常感谢您的帮助.

c# signed authenticode digital-signature x509certificate

9
推荐指数
1
解决办法
6526
查看次数

如何在.NET中验证DLL的数字签名

我编写了一个C#.NET应用程序,它使用流行的非托管DLL文件来实现其部分功能.使用System.Runtime.InteropServices中的标准DllImport导入DLL.

但是,遗憾的是,我的应用程序(以及大多数使用DllImport的.NET应用程序)容易受到DLL劫持攻击.即攻击者可以将导入的DLL的恶意副本放在与我的应用程序打开的任何文件相同的目录中.这可以使攻击者完全控制用户的计算机.

为了缓解此漏洞,我想在导入之前验证DLL文件是否已正确签名(使用默认的Authenticode).我知道签名可以使用像sigcheck.exe这样的工具进行验证,但这对我来说不是一个可行的解决方案,因为我需要在我的C#代码中完成.

所以我的问题很简单:在加载DLL之前,如何从我的托管C#代码中验证DLL是否具有有效的Authenticode签名?

限制:

  • 导入的DLL不是由我开发的,而是来自外部公司.
  • DLL不随我的应用程序一起分发,预计在运行我的应用程序之前已经安装了.
  • 导入的DLL存在于许多不同的版本中(甚至会有更多版本),因此我无法在导入之前简单地 验证DLL的MD5校验和.

失败的方法:

  • 微软有一个关于防止"DLL预加载攻击"的好文章,但是,这个信息不适用于.NET的DllImport.
  • 我见过一些人建议使用Wintrust.dll中的非托管函数WinVerifyTrust.这当然是一个愚蠢的解决方案,因为这会使我的应用程序容易受到Wintrust.dll的DLL注入.

.net c# security dll dllimport

8
推荐指数
1
解决办法
6075
查看次数

代码签署可执行文件两次

简短的问题

如何从可执行文件(.EXE/.DLL)获取有关多个代码签名证书的信息?

预期答案

最终接受的答案应该提出一种方法来获得C#中的所有证书.概念/伪代码是可以的,我不指望你写完整的源代码.

有关建议工具的中间答案,请参阅Security.StackExchange上的问题.

很长的问题

我正在研究是否可以在插件(.DLL)上使用多个代码签名证书来检查它是否已经过官方测试.这是程序:

  • 插件DLL由供应商签名,就像任何其他应用程序一样
  • 插件DLL进入测试实验室并进行一系列测试
  • 测试实验室再次对插件DLL进行签名,以便使用DLL的应用程序可以查看是否使用了经过测试的插件

似乎可以使用第二次签署DLL

 signtool /v /f <pfx> /as <dll>
Run Code Online (Sandbox Code Playgroud)

这可能有用的迹象:

  • 文件大小增加
  • 该工具打印成功消息

但是,有一些问题显示第二个签名:

  • 虽然Windows资源管理器说"签名列表",但它只显示一个证书
  • C#X509Certificate.CreateFromSignedFile()方法只能返回一个证书

目前我实际上是在EXE文件而不是DLL文件上尝试我的代码,但这应该不重要.EXE已使用受信任的根证书和时间戳签名.第二个签名是使用我自己的证书创建的,遵循这些步骤,目前没有时间戳.

在问这个问题之前我做了些什么:

  • 在Stackoverflow上搜索现有答案
  • 在Google上搜索工具

到目前为止我发现的唯一相关问题是如何使用时间戳正确地进行双重签名,但它没有答案.

.net c# code-signing

7
推荐指数
1
解决办法
2404
查看次数

C#:如何检测authenticode签名文件的篡改

我正在尝试编写一个C#程序来验证exe的数字签名.exe是用authenticode证书签名的,我想检测篡改.

我已经能够创建一个SignedCms实例,如下所述:从.NET中的Authenticode签名文件中获取时间戳

我假设SignedCms.CheckSignature可以做到这一点,但是这个方法永远不会引发异常......即使不是当我修改exe的某些部分时......

.net c# authenticode signtool

3
推荐指数
1
解决办法
3909
查看次数