Как мне прочитать открытый ключ из подписанного C# exe
Я подписываю Dot Net Exe, используя
signcode.exe with an spc/pvk combo
Файл должен прочитать свой собственный открытый ключ во время выполнения, чтобы проверить некоторые данные. Я пошел по разным направлениям.
я пробовал
X509Certificate executingCert = X509Certificate.CreateFromSignedFile(exe);
executingCert тогда равен нулю. Я предполагаю, что signcode не создает файл с подписью X509, хотя, если есть возможность изменить его, я буду рад пойти по этому пути.
Отредактировано Оказывается, вышеприведенное работает... У меня была нулевая проверка назад (!=!= ==):)
Assembly asm = Assembly.GetExecutingAssembly();
string exe = asm.Location;
X509Certificate executingCert = X509Certificate.CreateFromSignedFile(exe);
if (executingCert != null)
{
Console.WriteLine("Assembly is signed");
byte[] assemblyKey = executingCert.GetPublicKey();
}
2 ответа
SignCode (для.Net 1.0 и 1.1) использует подпись Authenticode, которой, насколько мне известно, не хватает управляемого интерфейса.Net Framework. Скорее всего, вам потребуется использовать P/Invoke для вызова подпрограмм в Win32 API, таких как те, которые описаны в этой статье базы знаний: Как получить информацию из исполняемых файлов с подписью Authenticode. Скорее всего, вам нужно будет использовать CryptQueryObject, который получит вам сертификат, из которого вам, вероятно, придется найти другую подпрограмму для извлечения открытого ключа.
Проверьте этот связанный вопрос Stackru, который имеет много ответов: WinVerifyTrust для проверки конкретной подписи?
Попробуйте что-то подобное:
Assembly.GetEntryAssembly().GetName().GetPublicKey()
В этом случае я использовал GetEntryAssembly, но, конечно, вы можете вызвать метод для любой загруженной сборки.