Есть ли простой способ проверить, существует ли цифровая подпись в файле, не пытаясь проверить сертификат, с которым он был подписан?
Я хочу подписать длинный список файлов exe и dll в каталоге, но только файлы, которые еще не были подписаны.
Например, если один из файлов был подписан Microsoft или какой-либо другой сторонней стороной, я не хочу подписывать их снова с сертификатом компании.
Легко проверить, есть ли у файла цифровая подпись или нет, щелкнув правой кнопкой мыши файл и просмотрев его свойства (если на закладке цифровой подписи появится подпись). Я ищу простой способ проверить это свойство цифровой подписи с помощью С#.
В настоящее время я использую команду verify с signtool.exe - которая не только проверяет, существует ли цифровая подпись, но также и сертификат, используемый для подписи файла, был выдан доверенным органом.
Вот мой простой, но неуклюжий подход для этого:
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:");
}
Обратите внимание, что я использую вербальный флаг "/v" и проверяю, содержит ли вывод текст "Цепочка сертификата подписки:" - только потому, что я заметил, что эта строка всегда находилась на выходе файла, который был подписан - и был исключен из любого файла, который не был подписан.
В любом случае, несмотря на свою неуклюжесть, этот код, похоже, выполняет свою работу. Одна из причин, по которой я хочу ее изменить, состоит в том, что для выполнения команды проверки файла требуется несколько сотен миллисекунд. Мне не нужно проверять сертификат, который я просто пытаюсь проверить, существует ли цифровая подпись в файле.
Короче говоря, есть ли простой способ проверить, существует ли цифровая подпись - не пытаясь ее проверить?