Загадки Code Signing

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

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

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

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

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

На той же виртуальной машине перетаскиваю инсталлятор с "сетевого" диска на локальный, опять жмякаю, вижу счастье:

В чем разница между сетевым диском и локальным - не могу понять.

В раздражении начинаю пробовать всякие другие инсталляторы других программ. Для части - вылезает окошко подобное первому (Security Warning), для части - сразу хорошее второе.

Какой-то системы не нашел. Ну разве только сразу "хорошее" лезет для распространенного софта (ACDSee, гарминовские утиля и т.п.), а предупреждение - для софта, который должен быть менее распространен (X-Rite Passport и так далее).

Кто знает, в чем тут секрет? Именно в распространенности софтвария (или ключа, коим он подписан) или есть какой-то еще фокус?

Update: signtool verify /pa для двух файлов:

Мой сетап от RawDigger, дает окошко первого типа:

Verifying: RawDigger-0.9.10-Beta-RU-Setup.exe
Hash of file (sha1): FBC00F491824B167C5FF424984F7226CBFD02F2A

Signing Certificate Chain:
    Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
    Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
    Expires:   Thu Jul 17 03:59:59 2036
    SHA1 hash: 4EB6D578499B1CCF5F581EAD56BE3D9B6744A5E5

        Issued to: VeriSign Class 3 Code Signing 2010 CA
        Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
        Expires:   Sat Feb 08 03:59:59 2020
        SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F

            Issued to: LibRaw LLC
            Issued by: VeriSign Class 3 Code Signing 2010 CA
            Expires:   Thu Feb 28 03:59:59 2013
            SHA1 hash: E5FDED60148BB9A3DB4F86A171676A013ECD1E3C

The signature is timestamped: Thu Mar 15 19:13:46 2012
Timestamp Verified by:
    Issued to: Thawte Timestamping CA
    Issued by: Thawte Timestamping CA
    Expires:   Fri Jan 01 03:59:59 2021
    SHA1 hash: BE36A4562FB2EE05DBB3D32323ADF445084ED656

        Issued to: VeriSign Time Stamping Services CA
        Issued by: Thawte Timestamping CA
        Expires:   Wed Dec 04 03:59:59 2013
        SHA1 hash: F46AC0C6EFBB8C6A14F55F09E2D37DF4C0DE012D

            Issued to: VeriSign Time Stamping Services Signer - G2
            Issued by: VeriSign Time Stamping Services CA
            Expires:   Fri Jun 15 03:59:59 2012
            SHA1 hash: ADA8AAA643FF7DC38DD40FA4C97AD559FF4846DE

Successfully verified: RawDigger-0.9.10-Beta-RU-Setup.exe

Number of files successfully Verified: 1

ACDSee, который сразу работает как мне надо:

Verifying: setup.exe
Hash of file (md5): 712A6C21DB5DD864F409FF876C4EAE72

Signing Certificate Chain:
    Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
    Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
    Expires:   Thu Jul 17 03:59:59 2036
    SHA1 hash: 4EB6D578499B1CCF5F581EAD56BE3D9B6744A5E5

        Issued to: VeriSign Class 3 Code Signing 2010 CA
        Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
        Expires:   Sat Feb 08 03:59:59 2020
        SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F

            Issued to: ACD Systems International Inc
            Issued by: VeriSign Class 3 Code Signing 2010 CA
            Expires:   Fri May 11 03:59:59 2012
            SHA1 hash: 5EB5B547DAEA1ABEB72B7D0F937C84B0C083A78D

The signature is timestamped: Wed Dec 07 02:04:17 2011
Timestamp Verified by:
    Issued to: Thawte Timestamping CA
    Issued by: Thawte Timestamping CA
    Expires:   Fri Jan 01 03:59:59 2021
    SHA1 hash: BE36A4562FB2EE05DBB3D32323ADF445084ED656

        Issued to: VeriSign Time Stamping Services CA
        Issued by: Thawte Timestamping CA
        Expires:   Wed Dec 04 03:59:59 2013
        SHA1 hash: F46AC0C6EFBB8C6A14F55F09E2D37DF4C0DE012D

            Issued to: VeriSign Time Stamping Services Signer - G2
            Issued by: VeriSign Time Stamping Services CA
            Expires:   Fri Jun 15 03:59:59 2012
            SHA1 hash: ADA8AAA643FF7DC38DD40FA4C97AD559FF4846DE

Successfully verified: setup.exe

Number of files successfully Verified: 1
Ну вот не вижу разницы принципиальной. Единственная разница - у меня Hash SHA1, а у ACDSee - MD5. Попробую, конечно, и это тоже....

Comments

это не поможет?

http://davestechshop.net/IE7PublisherCouldNotBeVerified
http://superuser.com/questions/69863/disable-windows-7s-open-file-securi...

Впрочем, установка с сетевых папок - дело настолько нечастое, чтобы ломать по этому поводу голову...

Не, ну это же на юзерской стороне.

Я хочу, чтобы первое окошко у юзера не вылазило никогда. Зря что ли $99 платили!

А если нажать на 1м окошке Run, то что второе окошко не вылазит?

Вылазит, конечно.

Но первое окошко мне противно и я хочу без него

Не может ли быть, что другие програмы, которые не выдают 1го диалога, уже запускались/известны системе?
У меня 1е окно выдается только на 1м запуске откомпилировнной фиговины, а дальше запускает молча.

Не. Запустил свой инсталлятор (с 1-м диалогом) с сети, поставил варез.
Запускаю опять с сети - опять первый диалог. Если перетащить на локальный диск, то все хорошо с первого раза.

тоже такую вещь замечал
особенно злобно для серверов
для простой хр не так фатально
а вот скажем если на локальный диск не скопируешь - то фиг под 2003 запустишь
видимо это какие-то политики безопасности
у тебя на виртуалке какая ось стоит?

(кроме как копировать на локальный диск сам не знаю как лечить)

На виртуалке - тоже 7-ка.

Меня раздражает, что я не вижу никакой разницы между подписью у Acdsee и у себя, но ACDsee этим раздражающим окошком не светит.

И раздражает меня скорее то, что я не могу понять в чем разница.

А что бывает, если сделать на файле right click -> Properties? Там иногда бывает "загадочная" галочка "Unblock this file ...", причем не совсем понятно, когда ее там выставляют, а когда нет (что-то связано со скачиванием из сети).

Не вижу ничего такого. Просто галочки Archive, Read-Only

я даже маску не находил, просто о ней слышал!

а нет ли у MS настройки/списка корневых сертификатов которые валидны при запуске програм с интернета/по сети?
типа для локального диска список сертификатов больше. или по сети/с интернету можно только только сертификатами особого вида

Ну вот я смотрю на ACDSee (который не дает предупреждения первого типа) и на свой варез.

Там одинаковые сертификаты корневые.

Поапдейтил пост результатами signtool verify....

выцепи сертификаты целиком и распарси их opensslем.
может там какие oid добавленны, которые эта тулза не кажет

1) не понимаю чем
2) если дело в OID, то все едино не спастись :)

ну ок, теперь сравнивай сертификаты которым подписанно.

что у файла написано в Zone.Identifier?
таймстамп сделан? а, вижу, сделан

так вот, если в Zone.Identifier если что-то написано - стереть нафик.

Распространенность софта действительно учитывается, если софт скачивать через IE, а вот через сетевые диски - не пробовал.

Так по сети же. Там нету Alternate data streams.

по сеты бывает.
и даже самба может поддерживать.
на вкладке general точно ничего нет про security?

Нету.

И тот признак, на который вы намекаете - он при копировании эксплорером сохраняется. Но тут его банально нету.

Что-то меня терзают воспоминания, что это уже винда запоминает, "откуда файло", если интрернет-броузером или эксплорером перетаскивать.
Попробуйте фаром или из ком. строки скопировать файл.

Если я Explorer-ом копирую с "сети" на десктоп - после этого копирования все пускается нормально, без первого предупреждения.

Ну вот, оно, да. Насколько я помню, где-то "в глубине" было — откуда файл "пришёл".
Вот пример:

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

1) Файл создается локально - считается хорошим)
2) Расшаривается по "сети" (VMWare Shared folders) - становится плохим
3) Копируется с сети на десктоп (Win Explorer, признаки плохости сохраняются) - становится хорошим
4) Другой файл, подписанный неотличимым способом - хорош во всех трех случаях

Вот тут есть упоминание:

If the certificate used to sign the application manifests is generated by a trusted root certificate authority, but the specific publisher certificate is not in the trusted publishers store, then the user will still be prompted, but with a slightly friendlier prompt than when the issuer of the publisher certificate is unknown (see Figure 3).

Похоже, есть зависимость не только от сертификата CA, но и от сертификатов разработчиков. Можно посмотреть их через IE в разделе Сервис - Свойства обозревателя - Содержание -Сертификаты

Я вот специально в посте привел Certificate Chain для ACDSee ("хороший" инсталлятор) и для своего вареза ("плохой"). Эти чейны одинаковы, с точностью до последнего сертификата разработчика (только он и отличается).

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

На тестовой машине - никакого личного сертификата нигде нет.

Ну и я естественно ничего такого "от ACDSee" не таскал, во-первых, у меня его нету....

Есть, разница хранится в дополнительном потоке (ntfs file stream).
Поток можно удалить утилитой streams.exe.

В рассматриваемом случае этого потока у моего инсталлятора и у ACDSee - нет. Проверял.

Очень похоже на SmartScreen.
Хотя SmartScreen обычно гадит в IE9, в саму Windows его обещали встроить только в восьмерке.

У тебя случайно не Windows 8?

Не, это семерка со всеми свежими апдейтами.

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

Ругаться на файлы выборочно, в зависимости от количества скачиваний в целом по планете и ещё неизвестно чего - главная фича SmartScreen-а. Тем он, сука, и достает.

Ты попробуй проверь - когда новый файл пытаешься запустить, Windows не лазят случайно в сеть его рейтинг посмотреть?

Мне очень сложно это проверить (в смысле - подампать сеть виртуальной машины), Infiniband имеет свои недостатки :)

Соображения против этой теории:
Firefox 10.0.1, Foxit Reader - с точки зрения этих виртуальных виндов "плохие" (дают окошко 1-го типа).
ORFO (by Informatik) - "хорошая".
Но я хрен поверю, что Орфо имеет лучшую статистику, чем Firefox.

Запрошу в Информатике аудиенцию, зря что ли Ашманов их выкупил обратно....

Firefox 10 ещё небось никто и не скачал вручную из IE. А что там автоапгрейд файрфокса сам влил из инета (как у меня сегодня утром) - MS не знает, это не влияет на статистику.

Так что это аргумент средней крутости.

Foxit Reader уж всяко качают мегатоннами.
А у FF - ключу уже полгода или около того, то бишь по ключу статистика должна была накопиться.

Трафик попробую посмотреть, интересно.

Оно смотрит по хэшу .exe файла. Ключ помогает, но не заменяет. Новая версия всегда первые несколько раз вызывает ругань.

Короче, я запросил аудиенции в Информатике (все дистрибутивы, скачаные с их сайта - ведут себя хорошо с первого раза).

Если посоветуют что-то конкретное и не секретное - отпишусь, естественно.

Пока рабочая гипотеза - 'Win7 Compatible Logo' (и, вероятно, какая-то БД по ним в пузе винды): http://alextutubalin.livejournal.com/290976.html

Другого признака, который бы предсказывал что будет с 95%-й вероятностью (необъясненное исключение одно, Вебмани) - наука в моем лице обнаружить не сумела.

тьфу, почему у тебя букву х-маленькую в субже нельзя напечатать?

По моим очень смутным воспоминаниям процедура была такая: обрели сертификат, потом прошли сертификацию, получили еще один сертификат, дальше как-то ими обоими воспользовались.

Вот этот второй сертификат и может быть результатом Лого.

Вторая гипотеза: в самих этих требованиях к виндовому логотипу сформулировано нечто, чего не должна делать твоя программа, но делает. Или делает как-то не так. Обретение логотипа автоматически это вылечивает.

ЗЫ. И сертификат нужен за пятьсот грина в год, не за сотню (или который первый год сотня, а потом - таки пятьсот) - это если ты хочешь делать варез, удовлетворяющий требованиям на логотип

Microsoft requires that interested vendors obtain a VeriSign Class 3 Digital ID. This Digital ID is a special kind of Digital Certificate used by organizations to digitally sign code

Третья: таймштамп у тебя верисигновский? Или твой собственный? В правильной процедуре при подписи ты взаимодействуешь по сети с верисигном, та подписывает время, когда ты подписываешь свой варез.

У микрософта надо искать доку про Code signing best parctices - может, там углядишь чего...

Еще надо зарегаться и выкурить winqual (он переехал, но поиск тебе поможет).

Пока все. Прости за обрывочность, но правда - вообще не помню.

У меня этот самый VeriSign Class 3 Digital ID. Купленный через микрософтовский же WinQual (где он продается со скидкой за $99). На нормальную американскую компанию.
Он cross-signed Microsoft-ом (тот верисайновский сертификат, которым подписан мой - подписан и MS-ом)

И, говорю же, для ACDSee цепочка сертификации полностью повторяет мою, никакого особенного MS-овского сертификата там нет (судя по показу SignTool Verify).
И предупреждение вылезает - до запуска.

Таймштамп - верисайновский, естественно.

Более того, Карягин мне сказал, что первое предупреждение (1-я картинка в посте) - это нормально и оно должно быть. Но у меня его - для Орфо - нету. Вот что удивительно то.

Что касается WinQual - да, я подозреваю что дело в нем. Как только выйду из беты - буду пробовать дальше.

А скажи, если твой варез запускать с сидюка - трабл есть или нет?

Ты задаешь вопрос, который невероятно сложен для меня. Ну где я сидюк возьму? Ну наверное надо как-то сделать .iso и его подмонтировать, но я забыл как делать .iso....

Если просто перетащить на локальный диск в той же виртуальной машине - первого диалога нет.

На моей основной машине трабла нет ни в каком виде, но это вероятно потому, что у меня свой сертификат в trusted.

Неро умеет iso делать, а под унихом, по-моему, штатная (самая распространенная писалка) их умеет делать.

Дальше, средствами VMWare оно монтируется и все.

Но, по идее, диалога не должно быть - сидюк это ж локальный диск, хоть с сменный.

Ну я вот Nero не ставил уже много лет. И не помню, чтобы последние годы что-то писал на CD/DVD. Просто не надо.

Я нет ли у Windows списка "publishers you trust"? Т.е. ключик ACD Systems International уже вписан как доверенный, и поэтому все равно откуда запущен инсталлятор (из сети или с нжмд).

Ну а как узнать? Это свежеустановленная (в виртуальную машину) семерка, руками ничего не добавляли.

Не, в Trusted Publishers - пусто.

В Trusted Root - лежит Verisign Class 3, от которого растет Certification Path и у моего вареза ("плохой") и у ACDSee ("хороший")

+1
впрочем добавление издателя может и не помочь
в свое время вяло поковырял вопрос и забросил, не до того было

Ну а как я буду добавлять издателя на юзерской машине ?

А посмотрите в NTFS потоках к этим файлам. Там может винда или антивирус метку ставит - файл из доверенного места или недоверенного

А в эксплорере для местной интрасети какой уровень безопасности стоит на той машине, с которой запускате?

1) А как это посмотреть?
2) Независимо от ответа на 1-й вопрос, это не объясняет разницу между моим варезом и ACDSee

Свойства обозревателя, вкладка безопасность, мучаем зоны.
На exe от acdsee уже может стоять галка о том, что он безопасный, а на ваш exe может стоять R\O и оно не могёт подправить свойство, напримерю.

Я глуп и туп, но там нет никаких галок у файла:

(это взгляд из виртуальной машины на "сеть")

Этот самый ACDSee и мой - выглядят одинаково, за исключением ключа, коим подписано.

Давайте таки попробуем сначала зоны убрать вниз по безопасности, так мы выясним в какой зоне находится файлик, а потом, когда я добирусь до нормальных интернетов, я смогу восстановить тот, как я насексовался с этим запуском с сетевых в своей сети.
Вы дистрибьютив на диск когда клали, вы его откуда скачали, со своего сайта?

Про Security-зоны я просто не понимаю. Они же в MSIE настраиваются, правильно? После того, как я все зоны убрал в Low - Securty Warning осталась.

А дистрибутив - локально свареный и подписанный, с сайта не скачивался.

http://blog.stealthpuppy.com/windows/avoiding-explorers-security-warning...
Они в MSIE настраиваются, да, но там снизу ещё статьи, что винда считает интранетом, а что нет. Учитывая что мы в виртуальной машине колбасимся, думаю, что многое ещё будет зависеть от того, как прокинуты сетевые адаптеры, нат это или мост, как подключены диски.
В общем, по ссылке, вроде всё понятно, относительно.

Лёх - по моему счастье случилось!
крайняя ночная сборка SASplanet научилась генерить
нормальные JNXсы для Гармина
Выделяешь кусок карты, выбираешь нужные масштабы для карты (сразу несколько а можно и поодному)
обзываешь карту и жмякаешь кнопарь
на выходе получаешь несколько JNX файлов, которые тупо льёшь на флешку навигатора
и они нормально кажутся!
Фирмварь ясно дело надо патчить
JNX файлы сами режутся на куски при превышении ограничений стандарта
никаких теперь танцев с конверторами и прочими Global Mapper

Ну а после SysInternal'овского streams -d всё равно не исчезает?

Я понимаю, что оно ничего не объясняет, но от первого окошка для исполняемых файлов с сетевого диска может помочь добавление его в IE security zones в trusted sites или local intranet.
Хотя это место весьма глючное, увы(KB303650).

У меня проблема (в голове) в том, что с этого самого диска разные инсталляторы ведут себя по-разному. И я для своего - хочу добиться поведения "как у AcdSee"

Думаю, к подписям это не имеет никакого отношения.

Сравните манифест (это там где requestedPrivileges, requestedExecutionLevel).

Ещё этот UAC слишком хитрый - пытается определить инсталлятор по названию файла (setup, update, installer). Так что можно и с названием поиграть.

А как это посмотреть на исполняемом файле (инсталлятора)?

Потому что что свой инсталлятор я делаю InnoSetup (где таких пимпок нету), что к чужому инсталлятору манифест не прилагается.

Поискать внутри файла слово manifest. Он в ресурсах содержится.

Ага, прикольно, ACDSee-шный говорит что хочет администратора. А мой - не говорит, хотя и хочет. Другой разницы нету (еще мой dpiAware, но это несущественно наверное).

Кажется, INNO позволяет рулить параметром PrivilegesRequired.
Впрочем, UAC очень умный.

Попробуйте ещё в InnoSetup maling list обратиться с этой проблемой.

P.S. Ещё я подумал: а может быть Webmoney не требуются права администратора, поэтому система и не предупреждает?