Допустим, вы независимый разработчик и выпустили своё приложение. Чтобы упростить установку, вы создаёте установщик и начинаете его распространять. Какой-нибудь смелый экспериментатор загружает, запускает инсталлятор — но видит строгое предупреждение:
Windows SmartScreen блокирует запуск исполняемого файла
Действительно, в текущем окружении Windows активно блокирует запуск бинарных файлов через функцию SmartScreen.
Но что такое SmartScreen?
SmartScreen собирает установочные данные от всех пользователей Windows, чтобы определить «репутацию» приложения. Если у программы нет хорошей репутации, вы получаете такое предупреждение. Большинство пользователей в такой ситуации удалят .exe, посчитав его вредоносной программой, но SmartScreen можно обойти, нажав на кнопку «Подробнее», а потом «Запустить в любом случае».
Рэкет с цифровой подписью
Но как создать себе репутацию? Прежде всего, Microsoft должна иметь возможность собирать информацию о том, кто опубликовал приложение, а это делается с помощью сертификата подписи кода. Самый очевидный вывод заключается в том, что неподписанные приложения всегда будут вызывать SmartScreen. Более коварный вывод заключается в том, что приобретение сертификата подписи кода — большие расходы для отдельного разработчика. В настоящее время нет никакого эквивалента Let's Encrypt для подписи кода, поэтому вам придётся покупать сертификат у авторитетных центров сертификации. Диапазон цен широк, но сертификат на один год обычно стоит около $100.
SSL.com предлагает один из самых «дешёвых» сертификатов подписи кода на рынке, по цене $129 в год
Предположим, вы клюнули на крючок, купили себе переоцененный ряд простых чисел, перемноженных компьютером, подписали свой код и повторно опубликовали своё приложение. Теперь пользователи начнут устанавливать ваше приложение, правильно? Неправильно.
Создание репутации — это уловка 22
Даже с цифровой подписью SmartScreen всё равно сработает. В конце концов, вы — неизвестный новый издатель, а процесс «создания репутации» SmartScreen — это абсолютный чёрный ящик. Итак, вот уловка 22: чтобы создать репутацию, вам нужно, чтобы люди устанавливали ваше программное обеспечение — и Microsoft собирала данные со статистикой установок. Но чтобы заставить пользователей установить ваше программное обеспечение, нужно избавиться от сообщения, которое явно предполагает, что ваш код повредит их компьютерам.
Дальше хуже.
Если вы попытаетесь опубликовать своё программное обеспечения с помощью пакетного менеджера WinGet (в двух словах: когда выйдет из бета-версии, этот скопированный с AppGet менеджер, вероятно, заменит Windows Store), то получите такое сообщение от Microsoft:
Microsoft WinGet считает запуск SmartScreen «ошибкой», а ваше программное обеспечение классифицируется как «вредоносное»
По словам Microsoft, ваше приложение считается вредоносным, если оно запускает SmartScreen. Они рекомендуют отправить файл для рассмотрения по специальной ссылке. Если вы проследуете этому процессу, то получите такой ответ:
Мы рассмотрели вашу заявку и подтвердили, что представленные файлы чистые. Антивирус Windows Defender не реагирует на вредоносные программы.
Сообщение, которое вы заметили, является уведомлением от программы SmartScreen. Оно указывает, что у приложения нет известной репутации в нашей системе.
Предупреждения о репутации приложений предназначены для информирования конечных пользователей, когда приложения не имеют известной положительной репутации. Это не означает, что приложение является вредоносным, только то, что оно «неизвестно». Обратите внимание, что пользователи всё ещё могут загрузить и запустить приложение.
В большинстве случаев приложение с цифровой подписью органично создаёт репутацию, если только не произошло чего-то такого, что могло бы очернить существующую репутацию, например, использование сертификата для подписи вредоносных программ. Мы проведём дальнейшее расследование этого вопроса и свяжемся с вами, если нам понадобится дополнительная информация.
По сути: ваше приложение чистое, но мы ничего не будем делать с ошибкой SmartScreen. Наши повелители облачных ботов решат, когда вам можно доверять.
И дальше ещё хуже.
Допустим, вас наконец-то одобрят алгоритмы в качестве надёжного издателя. Срок действия вашего сертификата истекает, и вы его продлеваете. Обычное дело в интернете. Но в мире программного обеспечения Windows ваша репутация обнулится. SmartScreen не распознаёт обновления сертификатов, он считает вас новым издателем, и вам придётся снова пройти через этот болезненный процесс.
Это можно смягчить, купив сертификат с более длительным сроком действия, но тогда стоимость становится просто непреодолимым барьером для большинства независимых разработчиков.
Сертификаты подписи кода EV
Для независимых разработчиков это конец пути. Для издателей существует ещё одно решение: сертификат расширенной проверки для подписи кода (EV). Подписывая код с помощью одного из них, вы автоматически обходите SmartScreen. Он зарезервирован только для корпораций и, как следует из названия, предусматривает дополнительную проверку информации. Её проводят центры сертификации.
Популярный центр сертификации Digicert.com продаёт такие сертификаты за колоссальные $699 в год.
Независимому разработчику придётся пройти через трудности образования юридического лица и раскошелиться на возмутительные цены за эти сертификаты. Конечно, для большинства это не реалистично.
«Разработчики, разработчики, разработчики!»
«Разработчики, разработчики, разработчики!» — кричал Стив Балмер со сцены. Одно из легендарных выступлений генерального директора Microsoft. Эти печально известные слова были произнесены ещё в 2006 году. Четырнадцать лет спустя Microsoft при Сатье Наделле хвалят за то, что компания стала более открытой, чем когда-либо. Но по иронии судьбы выходит так, что Microsoft сделала свою среду Windows чрезвычайно враждебной по отношению к своим любимым разработчикам. Чтобы исправить эту ужасную ситуацию, необходимо изменить SmartScreen или то, как работают сертификаты подписи кода.
Автор: m1rko