Как я могу заставить SmartScreen Filter доверять самоподписанному сертификату

Фильтр SmartScreen от Microsoft под Windows 8 - худший кошмар маленького разработчика.

Хотя я осознаю преимущества для конечных пользователей и эффективность предотвращения установки вредоносных программ на компьютерах конечных пользователей, я и многие другие разработчики предпочли бы не платить за ежегодное обновление сертификата подписи кода или, что еще хуже, EV Сертификат подписи кода. Кроме того, когда продукты, разработанные для внутреннего использования, подписаны доверенным сертификатом внутреннего ЦС, хранящимся в хранилище доверенных издателей, они все еще становятся жертвами чрезмерно усердного поведения фильтра.

Разработчики и администраторы могли отключать предупреждения и подсказки, устанавливая сертификат подписи кода издателя в хранилище доверенных издателей. Креативные разработчики могут установить свой самоподписанный сертификат подписи кода там, когда они устанавливают обязательный подписанный сертификат и отметку времени с платным сертификатом подписи кода Authenticode. После этого программы, подписанные издателем, будут считаться доверенными и не будут отключать аварийные сигналы фильтра SmartScreen. По сути, когда-то доверенное издатель был свободен от повторяющихся сборов.

Недавние изменения в фильтре SmartScreen (и его включение в качестве "функции" ОС в Windows 8) дают понять, что Microsoft хочет, чтобы вы купили сертификат подписи кода, а не творчески работали над проблемой, которую они создали для вас. Кто-нибудь обнаружил новый способ доверять издателям, которые по умолчанию используют свои самозаверяющие сертификаты для подписи кода (т.е. не показывать подсказки)? Если не считать полного отключения фильтра, что могут сделать конечные пользователи, чтобы фильтр SmartScreen всегда доверял самоподписанному сертификату?

Обратите внимание, что покупка сертификата подписи кода не является ответом на этот вопрос. Я ищу способ сказать SmartScreen Filter, чтобы он доверял издателю, который не покупает сертификаты из внешнего источника, а выдает собственные для использования внутри своей организации.

ОБНОВЛЕНИЕ: я думаю, что я мог бы найти обходной путь! В MSDN фильтр SmartScreen можно отключить в Windows 8 и Internet Explorer 10 для сайтов, перечисленных в качестве доверенных сайтов. Если бы кто-то мог проверить, что этот метод работает для программ установки, загруженных и запущенных с доверенного сайта в Windows 8, это было бы очень полезно и помогло бы многим независимым разработчикам и командам разработчиков. Это также был бы обходной путь, необходимый для ответа на этот вопрос. Доверенные сайты могут быть настроены с помощью групповой политики, поэтому все будет просто.

Программно отключить фильтр SmartScreen для зоны надежных сайтов можно, установив HKLM\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2!2301 для машины или HKCU\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2!2301 для пользователя до 0, и добавление сайта, которому доверяют, в зону надежных сайтов, можно сделать, как показано в этом вопросе.

Может ли кто-нибудь проверить, что предлагаемый мной обходной путь работает в Windows 8 для неподписанного или самоподписанного исполняемого файла, загруженного с доверенного сайта? Я сам не пользуюсь Windows 8, потратив бюджет на обновление ОС на оплату сертификатов.

4 ответа

Решение

Используя 90-дневную пробную версию Windows 8 от Microsoft, я смог убедиться, что мой обходной путь действительно работает. Если вы хотите платить за сертификат подписи кода один раз и только один раз вместо ежегодных сборов, этот метод также должен работать для вас, но я не могу дать никаких гарантий. Мое решение для каждой машины, но должно быть легко преобразовать для работы на пользователя.

Это мое решение:

  1. Настройте собственную инфраструктуру сертификатов.
  2. Публикуйте копии вашего корневого сертификата CA, любых промежуточных сертификатов CA, выданных вашим root, и любых сертификатов подписи кода, выпущенных вашим промежуточным CA, на ваш сайт в виде файлов.cer.
  3. Установите на своем веб-сайте сертификат SSL, выданный корневым центром сертификации.
  4. Создайте приложение установщика / загрузчика, которое выполняет следующие задачи:
    • Устанавливает сертификат корневого центра сертификации (с вашего веб-сайта, шаг 2) в хранилище доверенных корневых центров сертификации для компьютера конечного пользователя.
    • Отключает фильтр SmartScreen для интернет-зоны надежных сайтов, задав для HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2!2301 значение 0.
    • Добавляет свой веб-сайт на карту зоны, добавляя разделы реестра HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Настройки Интернета \ZoneMap\Domains\yourdomain.com\yoursubdomain.
    • Сопоставляет ваш домен с зоной надежных сайтов, создав DWORD с именем https со значением 2 в ключе, созданном на предыдущем шаге.
  5. Приобретите сертификат подписи кода у участника программы Microsoft Trusted Root, предпочтительно сертификат EV.
    • Перед покупкой убедитесь, что схема сертификатов и меток времени, используемая ЦС для вашего сертификата для подписи кода, не приведет к появлению OID 1.3.6.1.4.1.311.10.3.13 или 1.3.6.1.4.1.311.10.3.14, поскольку это приведет к срок действия подписи истекает по истечении срока действия сертификата, независимо от того, помечен ли он временем или нет.
  6. Подпишите и отметьте время своего загрузчика / установщика с помощью сертификата, приобретенного на шаге 5. Убедитесь, что срок действия подписи не ограничен. Если все в порядке, вы можете положить купленный сертификат подписи кода в безопасное место и заблокировать его.
  7. Опубликуйте программу загрузки / установки на своем веб-сайте. Сделайте это обязательной загрузкой для всех ваших продуктов.
  8. С этого момента вы можете использовать сертификаты для подписи кода (и другие сертификаты в этом отношении), выданные вашими собственными внутренними центрами сертификации, без использования фильтра SmartScreen.

Наихудшее предупреждение, которое я получил при использовании этого метода, было "Этот тип файла может нанести вред вашему компьютеру". Это типичное "Вы загружаете исполняемый файл!" предупреждение. Он не скрывает параметр "Выполнить" и не отображается для развертываний ClickOnce, использующих веб-страницу начальной загрузки, созданную путем нажатия "Опубликовать" в VS2010.

Спасибо за все комментарии и ссылки.

Цитировать с сайта MSDN:

Недоброжелатели могут утверждать, что SmartScreen "заставляет" разработчиков тратить деньги на сертификаты. Следует подчеркнуть, что сертификаты для подписи кода EV не требуются для создания или поддержания репутации с SmartScreen. Файлы, подписанные стандартными сертификатами для подписи кода, и даже неподписанные файлы продолжают создавать репутацию, как это было со времени представления Application Reputation в IE9 в прошлом году. Тем не менее, наличие сертификата для подписи кода EV является убедительным показателем того, что файл был подписан объектом, который прошел строгий процесс проверки и был подписан с помощью оборудования, что позволяет нашим системам устанавливать репутацию для этого объекта быстрее, чем неподписанные или не подписанные. -EV код подписанных программ.

Другими словами, проверка EV (платная) является лишь одним фактором в большом алгоритме, который определяет, отображается ли предупреждение SmartScreen или нет. Если у вас есть много людей, которые скачивают вашу программу, или если ваша ссылка на скачивание программы не изменилась в течение некоторого времени, с некоторой работой вы можете заставить вашу программу не показывать предупреждение. Кроме того, подписав код цифровой подписью, вы можете повысить репутацию своего приложения. Это прямо с веб-страницы Microsoft по этой теме.

Я нашел очень простой способ обойти фильтр даже без прав администратора. Что вам нужно сделать, это:

  1. Открыть блокнот
  2. Введите следующую строку: @%*
  3. Сохраните файл как "SkipSmartScreen.bat" (да, с кавычками) в той же папке, что и ваше приложение. Вы можете переименовать пакетный файл позже
  4. Чтобы запустить приложение, перетащите его в командный файл

Это тогда обойдет фильтр smartscreen.

Протестировано на Windows 10 Home, Pro и Enterprise, а также Windows 8 Pro.

Как это устроено:

  • @ - Это только для внешнего вида, оно скрывает имя выполняемой команды
  • %* - Это распространяется на все переданные аргументы командной строки (например, файл, который вы уронили в командный файл
  • Все дело: он выполняет файл через командный файл, как если бы он был строкой в ​​командном файле. По какой-то причине Windows не выполняет никакой проверки файлов, которые выполняются из командного файла.

Вот хорошее объяснение, как отключить SmartScreen:
- Windows SmartScreen - включить или выключить в Windows 8
- Снимите флажок в настройках папки

Что я использовал и что сработало для меня? Это был "первый вариант" из первой ссылки:

  1. Откройте панель управления (вид значков) и нажмите / коснитесь значка Центра поддержки.
  2. На левой панели Центра поддержки щелкните / нажмите ссылку Изменить параметры Windows SmartScreen.
  3. Если запрос от UAC, нажмите / нажмите Да.
  4. Выберите (точка) параметр, по которому вы хотите, чтобы Windows SmartScreen обрабатывал нераспознанные программы, затем нажмите / нажмите OK.
    ПРИМЕЧАНИЕ. Параметром по умолчанию является получение одобрения администратора перед запуском неизвестного приложения из Интернета.
  5. Когда закончите, вы можете закрыть Центр поддержки, если хотите.

Я надеюсь, что это то, что вы искали.:)

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

Обходной путь, который я обнаружил, состоит в том, чтобы упаковать ваш установочный файл в.zip (или подобный), а затем попросить пользователя загрузить этот сжатый файл и запустить установщик внутри. Это, по крайней мере, самое "красивое" решение, которое мне приходилось использовать в моем сценарии.

Этот метод избавляет вас от назначения каких-либо сертификатов вашим файлам. Вам просто нужно, чтобы пользователи доверяли вам, но это обойдет фильтр SmartScreen.

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

Другие вопросы по тегам