authenticode

Разгадки Code Signing (окончательные)

Окончательно разобрался с проблемой вылезающего предупреждения при запуске моего инсталлятора с сетевого диска (понятно что тестовое окружение дурацкое, но в нем проблема проявляется).

Первая гипотеза была в том что UAC oчень умный и о чем-то таком догадывается. Похоже, это не мой случай - в моем тестовом окружении подписанная программа без слова Setup (Install, Update) в имени файла (и в детальной информации о файле - тоже) - все одно ругается лишним предупреждением.

А вот вторая - оказавшаяся правильной - идея была про манифест файла. И действительно, у моего инсталлятора в манифесте написано:

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
        </requestedPrivileges>
    </security>
</trustInfo>
А у "хорошего" ACDSee (равно как у Orfo, других не смотрел) прямо в манифесте требуются права администратора:

Разгадки Code Signing (пока - только гипотеза)

Задал вопрос в Информатик, отчего ваша Орфо не выдает мне Secutity Warning в моем тестовом окружении, а много других программ (включая и наш RawDigger) - выдают.

Получил ответ: ничего такого не делали, никакой уличной магии, просто подписываем, еще вот Win7 Logo получили.

Тогда попроверял всякий пробованный варез (штук 20 разных инсталляторов) на выдачу Security Warning и на нахождение в Windows 7 Compatibility List. Получается вот что:

  • Подавляющее количество инсталляторов программ из этого списка запускаются без Security Warning.
  • Подавляющее количество того что не в списке - запускается с таким предупреждением.
  • Исключения, коих единицы, но есть:
    • Evernote 4.5 - запускается с Warning. В списке есть версия 4 (м.б. 4.5 и 4 - считаются разными).
    • Coretemp - взлетает мухой, без Warning, хотя в списке ее нет. Правда инсталлятор представляется как IntelliQ (это такая платформа монетизации бесплатных приложений), может быть его сертифицировали под каким-то еще соусом.

      Webmoney - нет в списке, но все работает.

Есть еще такие наблюдения:

Загадки Code Signing

Я разработчик десктопного софтвария молодой, неопытный, сразу не бейте, лучше научите.

Освоил SignTool и все что к нему прилагается, на девелоперской машине все работает как хочется, ура.

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

Жмякаю на сваренный мной инсталлятор и вижу такое вот:

Не, ну это лучше, конечно, чем 'Software from unknown published хочет нагадить вам на компьютер', но счастья недостаточно.

О Code Signing

Хочу сказать, что процедура выдачи Verisign Code Signing сертификатов, если пользоваться вот прямо их средствами, какая-то ужасающая:

  • Приватный ключ (сгенерированный Verisign) приезжает в формате .p12
  • Сертификат - в формате PEM
  • Signtool хочет все вместе в формате .PFX (он же, похоже, .p12)
При этом - никаких инструкций "как с этой фигней взлететь" (для сертификатов сайтов - хоть есть "как это все поставить в Apache"), только строгое предупреждение в E-mail, по смыслу такое:
  • Вам обязательно нужны два intermediate-сертификата, возьмите их отсюда.
  • А на странице где эти сертификаты - две textarea с сертификатами, дескать Select All и сохраните в текстовый файл.

Кроме того, в E-mail инструкции строго написано, что скачивать сертификат можно строго на том компьютере, который делал запрос. Что делать, если за прошедшее время машинка дала дуба (а нам рисовали сертификат 2 недели, не верьте что в Штатах все быстро) - неизвестно.

На этом фоне рождаются душераздирающие инструкции вроде всосите все в MSIE и им экспортируйте, но они годятся только если private key уже импортирован в систему (например, сделан MS-овской тулзой, которая сразу инсталлирует сделанный ключ в систему), скачаный с Verisign приватный ключ - не импортируется.

Под катом - инструкция, как все починить с помощью OpenSSL (записки для себя):

Subscribe to authenticode