小编ksu*_*sun的帖子

确定文件是否在c#中具有数字签名而不实际验证签名

有没有一种简单的方法来检查文件上是否存在数字签名而不尝试验证其签名的证书?

我想在目录中签署一长串exe和dll文件,但只包含尚未签名的文件.

例如,如果其中一个文件已由Microsoft或其他第三方签名,我不想再使用我公司的证书签名.

通过右键单击文件并查看其属性(如果数字签名选项卡显示已签名),可以轻松检查文件是否具有数字签名.我正在寻找一种使用C#检查此数字签名属性的简单方法.

现在,我正在使用带有signtool.exe的verify命令 - 它不仅检查数字签名是否存在,还检查用于签署文件的证书是否由受信任的机构颁发.

这是我执行此操作的简单而笨重的方法:

private static Boolean AlreadySigned(string file)
{
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.RedirectStandardOutput = true;
    startInfo.RedirectStandardError = true;
    startInfo.FileName = "signTool.exe";
    startInfo.Arguments = "verify /v " + file;
    startInfo.UseShellExecute = false;

    Process process = new Process();
    process.StartInfo = startInfo;
    process.EnableRaisingEvents = true;
    process.Start();
    process.WaitForExit();
    string output = process.StandardOutput.ReadToEnd();

    return output.Contains("Signing Certificate Chain:");
}
Run Code Online (Sandbox Code Playgroud)

请注意,我正在使用详细标记"/ v"并检查输出是否包含文本"签名证书链:" - 只是因为我注意到该字符串始终位于已签名的文件的输出中 - 并且从任何尚未签名的文件中省略.

无论如何,尽管它的笨拙,这段代码似乎完成了工作.我想改变它的一个原因是因为它似乎需要几百毫秒才能对文件执行verify命令.我不需要验证证书我只是想看看文件上是否存在数字签名.

简而言之,是否有一种简单的方法来检查数字签名是否存在 - 而不是试图验证它?

c# signing digital-signature file-properties

11
推荐指数
2
解决办法
1万
查看次数

同时使用sha1和sha256进行代码签名?

由于Windows更改了他们的安全策略,我们计划使用SHA-256算法而不是SHA-1开始代码签名驱动程序文件.但是,我们仍然希望能够支持仍需要SHA-1签名的旧操作系统.

使用Microsoft,signtool.exe我们可以使用/ fd标志使用SHA-1和SHA-256摘要算法成功编码签名文件.但是,如果可能,我们希望同时使用两种算法对文件进行签名.这甚至可能吗?我们希望避免使用不同算法签名的多组驱动程序,并根据操作系统确定要安装的设置 - 这将是我们的替代方法.

如果有人有完成此任务的经验,请解释您采取的方法.如果这是不可能的,那么可以理解为什么不可能的解释.

sha1 code-signing sha256 signtool driver-signing

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

检查Postgresql是否在监听

给定IP地址和端口号,是否可以检查具有该IP地址的机器是否在指定端口上监听Postgresql?如果是这样,怎么样?

我只想获得一个布尔值,即Postgresql是否正在侦听指定机器的指定端口.

database postgresql port boolean ip-address

5
推荐指数
3
解决办法
2万
查看次数