2

Я работаю над приложением ClickOnce, которое теперь хочу подписать с сертификатом, который я получил от Comodo, исключительно для того, чтобы избежать предупреждения «Неизвестного издателя» (а теперь и запрета SmartScreen), когда пользователи его устанавливают.Почему я не могу подписать ссылку на dll, подписав сборку exe post?

Мне удалось подписать манифест ClickOnce по адресу Проект -> Подписание -> Подписать манифест ClickOnce в Visual Studio. Но не удалось подписать сборку, установив флажок . Подпишите сборку с помощью моего сертификата Comodo из-за нескольких ошибок. Затем я протестировал его с помощью тестового сертификата, сгенерированного Visual Studio, и я получил сообщение об ошибке «Сборка сборки не удалась. Ссылочная сборка« blah.dll »не имеет сильного имени«. По-видимому, даже если бы я смог подписать мою сборку с моим фактическим сертификатом, мне тоже нужно будет подписать dll.

Затем я прочитал here, что вы можете подписать свои сборки, введя что-то вроде этого в командной строке пост-сборки: "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign /f "$(ProjectDir)actual_cert.pfx" /p password /v "$(ProjectDir)obj\x86\$(ConfigurationName)\$(TargetFileName)". Который избавился от не подписанной ссылки dll ошибка тоже.

Я опубликовал свое приложение в тестовом месте, и все 3 (или 2?) Окна предупреждений показали мое имя в качестве издателя (я понимаю, что пользователям потребуется несколько раз установить мое приложение, чтобы избавиться от вещи SmartScreen). Так что все было в порядке. Именно это меня беспокоит, поскольку DLL не подписана.

Это взлом, который в конечном итоге обернется на меня? Будет ли SmartScreen никогда не уходить даже после того, как пользователи будут устанавливать мое приложение несколько раз, потому что у dll нет сильного имени? Или все будет в порядке? И если да, почему бы Visual Studio не использовать dll без знака, если это действительно возможно.

+0

Я только беспокоился о подписании Authenticode с помощью signtool, а не с одним щелчком мыши. В каких файлах вы пытаетесь использовать signtool? Не подписывает правильную подпись вашей библиотеки DLL? Пока я подписываю свои DLL, я замечаю, что только на .exe я не подписал, что браузеры вызывают предупреждение при загрузке файла, или Windows показывает предупреждение об Неизвестном издателе. Не подписывание Dll не влияет на появление этих предупреждений. –

+0

Да, мне кажется, что он отображает только предупреждение для EXE, а не ссылки на DLL. Но мне любопытно, [как любой программист] (http://imgur.com/l3aFizL), о том, почему Visual Studio не позволит вам ссылаться на неподписанные DLL, когда это можно сделать, если я подпишу его после сборки, используя SignTool. Мне почему-то нечего делать. – Juan

+0

Я не очень хорошо знаком с подписью сборок в VS, потому что я использую signtool в первую очередь для подписания моих C++ exe и DLL.Но, похоже, проблема в том, что вы не можете подписывать DLL, потому что она не имеет сильного имени? Если вы сделали его сильным, то он работает? –

ответ

1

Подписание сборки и подписывание клика один раз манифест действительно две разные вещи. Вы не можете подписать сборку, которая БЕЗЗНАКОВЫЙ ссылки, потому что это как сильные имена работают в .net и он будет использовать другой инструмент (sn.exe), чтобы сделать это в командной строке

What is a "STRONG NAME" in .NET?

имеет хороший ответ на то, что значит быть сильным.

Подпись манифест клика один раз на самом деле просто добавляет подпись подлинника и не имеет отношения к нему, как правило, вы, как издатель, хотите, чтобы ваш подписанный подлинник с подлинными именами был также сильно указан, чтобы ограничить экспозицию заменяемой dll.

Таким образом, причина, по которой вы можете использовать signtool для своих ненасильных сборок, заключается в том, что это не требуется инструментом, но, вероятно, это хорошая идея сделать это независимо.

 Смежные вопросы

  • Нет связанных вопросов^_^