Код подписи исполняемого файла дважды
Короткий вопрос
Как я могу получить информацию о нескольких сертификатах подписи кода из исполняемого файла (.EXE / .DLL)?
Ожидаемый ответ
В окончательно принятом ответе должен быть предложен способ получения всех сертификатов на C #. Концепция / псевдокод в порядке, я не ожидаю, что вы напишите полный исходный код.
Для промежуточного ответа, предлагающего инструмент, см.мой вопрос по Security.StackExchange.
Длинный вопрос
Я исследую, можем ли мы использовать несколько сертификатов подписи кода для плагина (.DLL), чтобы проверить, был ли он официально протестирован или нет. Это процедура:
DLL плагина подписывается поставщиком так же, как и любое другое приложениеплагин DLL входит в тестовую лабораторию и проходит набор тестовDLL плагина снова подписывается тестовой лабораторией, так что приложение, использующее DLL, может выяснить, использует ли оно протестированный плагин или нетКажется возможным подписать DLL во второй раз, используя
signtool /v /f <pfx> /as <dll>
Признаки того, что это могло сработать:
файл увеличивается в размереинструмент печатает сообщение об успехеОднако есть некоторые проблемы с отображением второй подписи:
хотя в проводнике Windows указано «Список подписей», он показывает только один сертификатC #X509Certificate.CreateFromSignedFile()
метод может вернуть только один сертификатНа данный момент я на самом деле пробую свой код в файле EXE, а не в файле DLL, но это не должно иметь значения. EXE уже подписан доверенным корневым сертификатом и отметкой времени. Вторая подпись создается смой собственный сертификат, следуя этим шагам в настоящее время без отметки времени.
То, что я сделал, прежде чем задать вопрос:
поиск в Stackoverflow для существующих ответовпоиск инструментов в GoogleЕдинственный связанный с этим вопрос, который я нашел,Как правильно дважды подписать с отметкой времени но у него нет ответа.