Всем привет.
Мне надо подписать exe-шник программно без использования signtool.exe (так как его нельзя распространять, а мне надо в ходе инсталляции подписывать файл сертификатом).
Я нашёл способ с использованием SignedCms класса:
private static void SignFile(X509Certificate2 signCertificate, string fileToSign)
{
var signer = new CmsSigner
{
Certificate = signCertificate,
};
var content = new SignedCms(new ContentInfo(File.ReadAllBytes(fileToSign)));
content.ComputeSignature(signer, true);
byte[] signedFile = content.Encode();
string signedFileName = fileToSign + ".signed.exe";
File.Delete(signedFileName);
File.WriteAllBytes(signedFileName, signedFile);
}
Но проблема в том, что после подписания exe-шник перестаёт запускаться. Пишет
This version of d:\Progi\ConsoleApplicationTest1\ConsoleApplicationTest1\bin\Debug\setup.exe is not compatible with the version of Windows you're running. Check your computer's system information to s
ee whether you need a x86 (32-bit) or x64 (64-bit) version of the program, and then contact the software publisher.
При этом видно, что файл подписывается (изменяется) и есть возможность вернуть его обратно (открыть с помощью SignedCms класса, извлечь подпись и содержимое и сохранить содержимое на диск).
Т.е. складывается впечатление, что exe-шник нельзя подписать с помощью CmsSigner.
Или, может, я делаю что-то не так? Может, кто-нибудь сталкивался с таким и может помочь?
P.S. Ещё нашёл способ с использованием CryptUIWizDigitalSign функции (это WinApi). Но не хотелось бы использовать WinApi, если есть возможность сделать через .NET.
Здравствуйте, kong8313, Вы писали:
K>Мне надо подписать exe-шник программно без использования signtool.exe (так как его нельзя распространять, а мне надо в ходе инсталляции подписывать файл сертификатом).
Как-то странно.
K>Я нашёл способ с использованием SignedCms класса:
Это просто подписывает файл данных.
Думаю смотреть нужно в сторону COM и
Alternatives to Using CAPICOM, раздел Digital Signature Objects.
F> Думаю смотреть нужно в сторону COM и Alternatives to Using CAPICOM, раздел Digital Signature Objects.
Это как я понимаю враперы над CAPICOM, который непонятно можно ли редистрибутить.
Здравствуйте, Tom, Вы писали:
F>> Думаю смотреть нужно в сторону COM и Alternatives to Using CAPICOM, раздел Digital Signature Objects.
Tom>Это как я понимаю враперы над CAPICOM, который непонятно можно ли редистрибутить.
Редистрибутить вроде можно (там у них отдельный пакет есть), тем не менее пожалуй лучше не стоит.
Забираю вредный совет обратно.