Code Signing в Windows, просто и недорого

  • Tutorial
Хотел бы рассказать тут о такой важной особенности разработки под Windows как Code Signing. А ведь многие достаточно серьёзные разработчики до сих пор ей не пользуются, и очень зря. Помимо того что при запуске вашего неподписанного приложения появляется противная красная иконка с крестом и неприятным текстом:
«Этот файл не имеет цифровой подписи которая может подтвердить производителя. Вы должны запускать программы только от производителей которым доверяете.»
Это ещё и пропуск на корпоративный рынок.

При запуске неподписанной программы появляется такое окно:
image

А так выглядит окно когда программа подписана:
image

Раньше вы возможно не обращали внимания на эту ерунду, но многие обращают. Во многих компаниях (те что покрупнее и не очень) запуск неподписанных программ просто запрещён, защита от вирусов и прочего «добра». Так что неподписанной программой вы сходу закрываете себе этот рынок и пугаете обычных пользователей. И это при том что сертификат для подписи стоит всего $99 в год ( у Comodo Group Inc. ).

Правда тут может быть одна проблема, сертификат выдаётся на компанию, в некоторых случаях получается получить сертификат на ИП с dba(doing business as) именем вместо имени и фамилии. На частное лицо получить сертификат не получится. Ещё некоторое время назад, хитрецы владеющие фотошопом могли получить сертификат «нарисовав» документы. Но потом ребята из сообщества Mozilla купили себе сертификат в Comodo без каких либо проверок вообще и рассказали об этом в сети. С тех пор в Comodo требуют уставные документы компании.
Другие trusted certificate authority тоже предлагают подобные услуги, но они дороже. Даже на сайте самого Comodo сертификаты по $166.95 в год, Thawte $299 в год, Verisign $499 в год. Если же вам надо подписать драйвер, то Verisign без вариантов, хотя на первый год можно получить скидку в $400 и заплатить всего $99 ( надо использовать этот промо код: THEDEAL99 ). Также без сертификата Verisign не получить Designed for Windows… Во всех остальных случаях нет никакого смысла переплачивать за имя компании выдавшей сертификат. Сертификат за $99 наилучший вариант на данный момент, только покупать его надо через реселлера, например: ksoftware.net, я покупаю сертификаты через них уже не первый год.

Один важный момент, прежде чем получать сертификат, очень желательно зарегистрировать вашу компанию или ИП в агенстве Dun & Bradstreet и получить DUNS номер. Этот номер очень уважается компаниями которые выдают сертификаты и при предъявлении этого номера, в абсолютном большинстве случаев, более никаких подтверждающих документов не спрашивают. Иначе придётся высылать сканы уставных документов, а иногда и каких-нибудь счетов на компанию, например за телефон. Для получения сертификата на ИП это один из главных шагов. Без этого в случае ИП может вообще ничего не получиться.

Сам процесс подписания программы/инсталлятора достаточно простой и легко автоматизируется, если надо могу описать и его.

Вот собственно и всё. Если вы работаете на рынке программного обеспечения для windows — сертификат это важная и необходимая вещь. Я надо признать и сам стал избегать неподписанных программ после этого.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 86

    +4
    еслиб вы поведали как сделать это бесплатно, и почему мы должны платить за это деньги было бы супер =)
      +3
      Бесплатно никак, ведь для содержания инфраструктуры нужны некоторые деньги. То что Verisign просит $499 в год, тоже можно понять, скорее всего MS «в доле». Так как для драйверов и получения Designed for никакой другой trusted certificate authority просто не подходит.
        0
        Интересно, а что это за инфраструктура, которая стоит минимум $100 за клиента в год, если учесть, что certificate authority потом вообще ничего с ним после выдачи ключа делать не приходится?
          0
          ну а sales, поддержку и директора кормить на что ;) certificate authority ещё предоставляет timestamp сервер, правда у Comodo он какой-то не очень быстрый.
            0
            А что такое timestamp сервер?
              0
              оттуда берётся время подписания.
      +8
      увы, с такими ценами кол-во подписанных бесплатных программ будет невелико…
        +1
        Есть варианты, если не подписывать сомнительные программы то собравшись в некоторое сообщество freeware/open source разработчиков, можно купить один сертификат и подписывать им. Только тут нужна организованность самого сообщества и юр.лицо на которое оформить сертификат. Возможно получится оформить сертификат на некоммерческую организацию(зарегистрированную по всем правилам). Mozilla ведь подписывает. Но на самом деле от freeware/open source программ никто особо не ждёт таких вещей.
          0
          То есть можно считать, что для freeware/open source закрыт путь на корпоративный рынок?
            0
            Это зависит от политики конкретной фирмы где будет развёртываться freeware/open source. Запрет ведь не повсеместный. Например Open Office/Firefox подписаны. Lotus Symphony, OpenFire — нет.
          +3
          У «бесплатных» программ другая бизнес-модель.

          И, да, бесплатным программам сертификаты как раз нужнее, чем платным, так как позволяют отличить бесплатную программу от трояна или программной бомбы.
            –1
            А платная, что ли, автоматически считается беленькой, чистенькой, мягкой и уютной?
            Все зависит от ловкости рук дельца.
            0
            Цены регулируются рынком. Да и вообще, странная фраза. Вот вам аналоги:
            Увы, с такими ценами на компьютер — количество их пользователей будет невелико.
            Увы, с такими ценами на Windows количество проданных программ будет невелико.
            Увы, с такими ценами на образование, скоро никто не будет учиться.
            +3
            Я так понял, подписанный центром сертификации сертификат нужен, чтобы «в случае чего» могли «найти» тебя и твою «фирму», выпустившей некачественный продукт.

            То есть сертификат ни о чём не говорит и уж конечно не гарантирует качество подтверждённого им ПО. А центры сертификации, которые торгуют дешёвыми сертификатами без аудита юридического лица, обратившегося к ним за получением сертификата, не нужно воспринимать всерьёз и усыплять бдительность с.б. организации.
              +3
              Насчёт найти фирму это врядли, отзовут сертификат и он перестанет быть валидным как только что-то всплывёт. Но подпись это ещё и защита от модификации программы по дороге от разработчика к клиенту. То есть грубо говоря контроль целостности, чтоб ничего лишнего не поставилось.
              Качество ПО никак конечно не гарантирует. А центров которые выдают сертификаты кому попало нету. То что Comodo выдал сертификат для Mozilla без проверок и запроса документов, дорого им стоило.
              Как я писал: без DUNS номера, попросят уставные докменты и 1-2 счёта(utility bill), а ещё могут и что-нибудь заверенное нотариусом с заверенным переводом на английский. DUNS номер просто так не получить вообще, они документы проверяют очень тщательно и у них в базе есть все данные о фирме, именно по этому им доверяют.
                0
                > отзовут сертификат и он перестанет быть валидным как только что-то всплывёт

                Но программа, подписанная им, успешно продолжит свой путь по компьютерам пользователей — правильно?

                И еще, подскажите, пожалуйста — сертификат стоит $499 в год у VeriSign, но это имеется в виду, что через год я просто не смогу им подписывать свои новые программы? А если я переведу часы на компьютере?
                  0
                  онлайн проверку на валидацию не пройдёт, а после обновления корневых сертификатов не пройдёт и оффлайн.
                    0
                    Да, через год просто нельзя подписать будет.
                0
                долго отводил глаза сначала на первую картинку с неподписанной прогой, и потом на вторую — искал отличия.

                Во многих компаниях (те что покрупнее и не очень) запуск неподписанных программ просто запрещён, защита от вирусов и прочего «добра»


                во многих иностранных — возможно. У нас же никогда такого не встречал =)
                  0
                  да у нас только там где всё очень серьёзно ;)
                  +1
                  Можно объяснить в двух словах, что делается при сертификации, приложение тестируется на безопасность и надежность?
                    +2
                    Никак не тестируется, вы получаете сертификат и делаете с ним что хотите. После подписи приложения можно установить что оно подписано валидным сертификатом, выданным конкретной фирме. Ну и то что приложение не модифицировано после подписи, каким-нибудь вирусом например. Если вирус модифицирует файл, то от этого изменится контрольная сумма и валидация не пройдёт.
                    0
                    На частное лицо получить сертификат не получится.


                    У Comodo 2 недели назад я получал на частное лицо. Не без проблем, конечно, но решаемо…
                      0
                      Значит они опять расслабились ;)
                        0
                        Рисовали документы?
                          0
                          Нет, все честно сканировал. Пришлось даже выписку из банка брать и от моб. оператора (за отсутствием стационарного телефона).

                          Проблема была в том, что нужно было на копиях документов от руки написать точный перевод. Причем без исправлений. А мне очень сложно без исправлений писать, особенно когда есть такое требование — «без исправлений». Испортил целую пачку бумаги, пока, наконец, все написал :)
                            0
                            а что за документы сканировали если на частное лицо сертификат?
                              0
                              1. Документ с фото (паспорт).
                              2. Выписка из банка за последние 6 мес. с указанием ФИО и адреса проживания.
                              3. Платежка за свет или телефон с указанием ФИО и адреса проживания.

                              Дополнительно могут позвонить к вам и задать пару вопросов (хотя ко мне не звонили, хотя планировали).
                                0
                                Все это нужно перевести на английский от руки. Сделать копии документов и прямо на копиях подстрочный перевод.
                                  0
                                  Я делал тоже самое с документами на компанию. Просто возможность оформить сертификат на частное лицо удивила.
                                  А что написано в графе publisher у подписанного таким образом файла? ФИО?
                                    0
                                    Имя и фамилия. Fiddler, кстати, тоже был подписан сертификатом на имя/фамилию от того же COMODO. Выдает ли кто другой сертификаты на частное лицо — не знаю. Verisign вроде не выдает…
                        +3
                        Давно взял за правило: всегда обращать внимание на подпись при установке приложения. Если есть эта возможность — почему бы не пользоваться, лишняя защита от вирусов не помешает.

                        Интересно, каким имено образом могут воспользоваться злоумышленники с помощью не дорогого сертификата от того же Comodo? Не рационально же платить даже $99, ведь риск что сертификат будет отозван БЫСТРО в случае проблем с ПО, велик.
                          –1
                          Есть куча бесплатных вариантов получить сертификаты от контор типа «Рога и копыта». Будет валидная подпись, а внутри — дрянь. Первые TDSS, например, с подписями были.
                            0
                            Нет ни одного такого варианта. Ни одного. Для этого нужно чтобы сертификат конторы «Рога и копыта» был в списке доверенных издателей на машине клиента, а там его нет.

                            Можно сделать самоподписной сертификат с помощью Open SSL, но т.к. его нет в рутовом хранилище машины — он не будет распознан как доверительный. При запуске такой программы будет сообщение, что сертификат проверить не удалось.
                              –1
                              То есть вы хотите сказать, что исполняемый файл, содержащий цифровую подпись не может быть проверен на валидность без какой-то дополнительной информации?
                                0
                                Мы же говорим сейчас о стандартной проверке подписи в системах Windows/Mac OS.

                                Сертификаты всех доверительных издателей устанавливаются вместе с Windows. Чтобы Windows признал действительной подпись разработчика программы, его сертификат должен быть выдан доверительным издателем. А «Рога и копыта» в списке доверительных издателей не значатся…
                                  –1
                                  Простите, я нигде не говорил о ДОВЕРИИ подписи, только о ее валидности. Будет ли венда делать различия между доверенными и недоверенными сертификатами в случае, если файл все-таки подписан — вот в чем вопрос. Если нет — то хватит и подписи от РиК.
                                    +1
                                    Конечно будет. Сами проверьте – подпишите что-нибудь самопальным сертификатом и попробуйте запустить. Получите сообщение вида: «сертификат есть, но откуда он – не знаю», что, по большому счету, еще подозрительнее, чем полное отсутствие сертификата.
                                      –1
                                      У меня венда SP3 поставленная из коробки вообще не выдает никаких предупреждений при попытке запуска приложений. Наверное, ее надо как-то настраивать…
                                        0
                                        предупреждения выдаются на программы из вне, при запуске по сети или после скачивания.
                                  0
                                  расскажу про сертификат.

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

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

                                  например, вася подписал файл сертификатом. это значит, что:
                                  — этот файл сделал вася.
                                  — verisign уверена, что вася — это именно вася, а не петя, который назвался васей.
                                    +1
                                    но возникает проблема: кто же проверит саму verisign? для этого есть корневые сертификаты, которые устанавливаются вместе с системой. они и заверяют подпись verisign под васиным сертификатом.

                                    что касается самоподписанных сертификатов, то:
                                    — этот файл сделал вася
                                    — вася считает, что вася — это точно вася.

                                    естественно, что считать эти сведения надёжными нельзя. должен обязательно существоваться путь к корневому сертификату.
                              0
                              Для проверки, отозван сертификат или нет, требуется соединение с центром сертификации. Не у всех интернет-соединение постоянно активно.
                                +1
                                я бы по другому сказал, для точной проверки валидная ли подпись требуется соединение.
                                  0
                                  Да но и вирусы БЫСТРО размножаются только через сеть. Нет инета — нет желаемого эффекта. Если делать расчет на пользователей в оффлайн, то 1) вообще не понимаю какой от них толк? (ни бот сети, ни данных своровать, разве что смс попросить отправить) 2) большое кол-во пользователей заразиться лишь по истечению времени, за которое сертификат точно будет отозван, а сейчас нет полностью оффлайн — обновления все же стараются брать у знакомых даже те у кого нет сети.

                                  Все таки хотелось бы услышать примеры, если они есть :) Вообще может даже лучше перефразировать сам вопрос. Насколько стоит доверять дешевым сертификатам, полученным от того же Comodo? Или это все «игра брендов»?
                                    0
                                    Подпись файлов это всё-таки не панацея от всего.

                                    А что вы подразумеваете под доверять?
                                      0
                                      Каждый раз при установке нового приложения, если есть подпись, я устанавливаю не задумываясь (если я вообще доверяю авторам). Мне так и стоит делать? Или есть какие-то нюансы? Пусть вопрос звучит немного глупо, но человек хорошо разбирающийся в теме, думаю, увидит мои ошибки :)
                                        0
                                        Ну про доверие авторам я поспешил. При наличии подписи, я как-то автоматически доверяю и авторам :) А стоит ли? И в каких случаях я могу пожалеть о таком доверии? Вообщем как злоумышленники могут воспользоваться доверенным сертификатом для подписи приложения? Есть ли реальные случаи? Серьезная ли это проблема, или единичные случаи? Заслуживает ли доверия не дорогой сертификат от того же Comodo? Вы спрашиваете «А что вы подразумеваете под доверять?» Ну что может подразумевать простой пользователь :)
                                          +1
                                          допустим даже самый дорогой и правильный сертификат можно украсть и воспользоваться в корыстных целях ;) По меньшей мере, при валидном(даже без проверки по интернету) сертификате, можно быть увереным что там нет ничего что не хотел положить туда автор. Если сертификат не украден. А вот что туда положил автор — это сертификатом не регулируется.
                                  0
                                  То есть, если есть выход в Инет, то Windows еще и втихую перед запуском делает запрос к серверу, не отозван ли сертификат?
                                    0
                                    нет, по умолчанию таких запросов не делается.
                                +1
                                Давно меня терзает мысль о том, что несколько компаний, которые в своё время всунули свои корневые сертификаты в WindowsXP наример, получают огромные прибыли. Причем если, например, для регистраторов доменов (тоже воздухом торгуют по большому счету) требуется поддержка серверов в течении всего срока регсрации домена, то для тех кто выдаёт подписи нужны действия только в момент выдачи подписи.

                                Генерация сертификатов весьма несложный процесс, который можно сделать и на своей стороне, но тогда конечному пользователю придётся явным образом импортировать сертификат.
                                  +4
                                  Недавно покупал дом — нотариусу за 1.5 часов работы пришлось дать столько денег, сколько средний человек за 3 месяца не зарабатывает. Хотя технически он только распечатал договор на фирменном бланке и пробил информацию по базе. За что такие деньги?

                                  Кажется я знаю почему так:

                                  1. Во первых, если бы сертификат стоил 5 баксов, то имело бы смысл получать сертификаты на поддельные документы. Отозвали сертификат — заказал новый. Расходы могут себя оправдать (бот-сеть и воровство кредиток приносит больше денег).

                                  2. Если нотариус (издатель сертификата) будет мало получать, то будет большой соблазн войти в сговор с мошенниками. Ведь терять то особо нечего. А если дрожит за свое кресло и боится потерять доверие — такого соблазна не будет (и доверия к издателю — больше).

                                  Да и по большому счету для страны первого (6000 у.е. средней зарплатной) мира 99 у.е. — не такая уж большая сумма. А для Индии или Украины (с 300 у.е. средней зарплатой) — конечно много. Для Украины нужна стоимость в 4.50 у.е. (т.е. в 20 раз меньше, как и зарплата). Кстати, наши государственные цифровые сертификаты столько и стоят — 50 грн. для ИП.
                                    0
                                    спасибо
                                      0
                                      А к нашим государственным цифровым сертификатам в Windows есть корневой сертификат, или будет опознаваться как самописный?
                                        0
                                        Нет, конечно :) Разве наше государство способно договориться с кем-нибудь кроме себя?

                                        Пока эти сертификаты Windows не сможет проверить, даже если самому добавить корневой сертификат основного сертификационного центра. Вся проблема в нашем уникальном алгоритме цифровой подписи. Может когда-нибудь добавят этот стандарт в Windows CAPI, хотя надежды мало.
                                    +1
                                    Плюсую. Серьезный софт без подписей — это маразм. Особенно маразматична ситуация, когда банк-клиенты ее не имеют!
                                      0
                                      >>промо код: THEDEAL99
                                      Эх, где вы были две недели назад… Уже уплочено :(
                                        0
                                        Как получить сертификат на ИП, но с именем dba?
                                          +1
                                          Надо обязательно зарегистрироваться в DnB. При регистрации в полное название компании вписывается: Предприниматель ФИО
                                          В следующем поле (краткое название/торговая марка) пишите ваш dba.
                                          После получения DUNS номера, заполняйте форму на сертификат с dba именем и прикладывайте ваш DUNS номер в качестве докозательства.
                                          0
                                          То есть обычным независимым разработчикам с опенсорсными программами вообще не светит получение этого сертификата? Ну круто, чё
                                            0
                                            ну почему-же вот: habrahabr.ru/blogs/development/83008/#comment_2470644
                                            только документы придётся рисовать, и в общем это не очень правильно.
                                              0
                                              Что именно рисовать? Ничего рисовать не нужно. Документы нужно сканировать.

                                              Нужен перевод от руки на английский.
                                                0
                                                я вас неправильно понял, думал вы фирму нарисовали (потому что некоторые мои знакомые так делали). А оказалось что у Comodo можно на частное лицо оформить.
                                            0
                                            Если можно, то опишите более детально процесс «вживления» сертификата в инсталляторы (я так понимаю что это диалоговое окно появляется только если файл скачан из интернета, ну и это обычно exe инсталлера) и программы.

                                            Думаю всем будет полезно.

                                            P.S. Спасибо за промо код на Verisign.com
                                              +1
                                              Для этого есть специальная программулина из Windows SDK, называется SignTool. Запустить нужно с директивой signwizard.

                                              Еще очень важно добавить метку времени timestamp.verisign.com/scripts/timstamp.dll Без нее подпись будет признана невалидной после окончания действия сертификата.
                                                +1
                                                У меня в последнем SDK signcode.exe (C:\Program Files (x86)\Microsoft.NET\SDK\v1.1\Bin) .NET SDK

                                                Просто запускаете, а там далее мастер.

                                                Впрочем, вот, тем, кто не видел =) Только у нас личные сертификаты на подпись кода (+авторизацию)







                                                  0
                                                  Спасибо. Не думал этим пока заниматься, но благодаря посту и детальной информации, сертификат уже в процессе оформления. :)
                                                    0
                                                    Если хотите просто протестировать, есть с десяток тестовых сертификатов от нашего ЦС (чтобы поучится, самое то)
                                                      0
                                                      Спасибо. Я уже протестировал используя персональный сертификат своего компьютера, правда только без TimeStamp :)
                                                        0
                                                        Чтобы поучиться, можно самому себе выдать тестовый сертификат и выполнить команду из SDK (забыл какую, если честно), доверять своему тестовому сертификату. Это поможет понять правильно ли всё подписывается. а дальше можно уже и более «правильные» сертификаты использовать.
                                                        Это я так, для уточнения :)
                                                  0
                                                  Да, после скачивания файл помечается что он из внешних источников.
                                                  Когда сертификат уже в системе, для подписи потребуется вот эта утилита SignTool.exe
                                                  msdn.microsoft.com/en-us/library/8s9b9yaz(VS.80).aspx

                                                  Сам процесс подписи таков (в случае Comodo, у Verisign другой timestamp server ):
                                                  signtool.exe sign /a /t timestamp.comodoca.com/authenticode ваша-программа.exe

                                                  Нужно быть онлайн, чтобы signtool.exe связался с сервером и выставил правильный timestamp.

                                                  Кстати последние версии инсталятора InnoSetup позволяют подписывать и анинсталлер. И вообще лучше подписывать всё что подписывается, все второстепенные .exe и .dll.
                                                    0
                                                    Кстати, timestamp-сервер от Verisign можно использовать с любым сертификатом. А адрес комодовского сервера я и не знал…
                                                      0
                                                      А кстати, не подскажете, где именно он помечается внешним?
                                                  0
                                                  Спасибо за полезную информацию. Расскажите по процессе подписания софта, если не затруднит.
                                                    0
                                                    Чуть выше описал. Более детально: здесь.
                                                    0
                                                    А где хранятся сведения о том, что файл подписан? В альтернативном потоке ntfs? Тогда получается при переносе файла на fat32\ext3 я потеряю подпись?
                                                      0
                                                      В отдельной секции файла. При переносе в другую FS всё сохранится.
                                                        0
                                                        Спасибо, а то некоторые комменты меня смутили )
                                                          0
                                                          Если я правильно понял, то там говориться что он внешний, то есть скачан с инета.
                                                            0
                                                            Там стоит Zone.ID
                                                            Проверить можно так:
                                                            notepad < «файл.exe:Zone.Identifier»

                                                            Если нет потока то notepad предложит создать новый файл, если файл загружен из интернета с помощью IE то там будет:
                                                            [ZoneTransfer]
                                                            ZoneId=3

                                                            Вот тут подробнее
                                                      0
                                                      А расскажите, пожалуйста, про создание собственных сертификатов — как ими можно подписать софт? И, что в этом случае будет отображаться у пользователя, какие дополнительные предупреждения?
                                                        0
                                                        Ну, тут есть несколько сценариев:

                                                        1. Будет предупреждение что сертификат не удалось проверить, это будет из-за того, что в системе не установлен корневой сертификат ЦС(Центра Сертификации), в общем, будет считаться невалидным, это же верно и для SSL, Mail сертификатов. Пожалуй исключение, это сертификаты для шифрования. (Data Encipherment)

                                                        2. Если вы дадите пользователю .p12 с иерархией сертификатов, начиная от корневого, то он сможет сам установить их у себя в системе, тогда проверка, в случае правильности сертификатов, пройдет. Но насчет SSL, Mail — то еще придется поставить сертификат в эти агенты, браузеры.

                                                        Вот, например, если у вас FF/Opera, можете попробовать поставить сертификат: здесь

                                                        В случае с ИЕ и в целом виндой надо уже другого формата файл (для удобства, чтобы не объяснять простому пользователю, в какое хранилище помещать этот сертификат)

                                                        3. Сделать инсталлятор для сертификатов, который сделает это сам, тоже вариант.

                                                        По поводу того, как их создавать, то для этого я использую пакет OpenSSL и свою программу, для организации иерархии + OCSP, TSA, CRL. Но вроде в комплекте есть перл скрипт для создания небольшого ЦС.

                                                        Второй вариант, это Windows Server, там есть ЦС, там будет это по нагляднее я думаю, но сам не работал.

                                                        А так в общем, как вариант, вы можете предлагать пользователям скачать этот .p12 (.pfx), после чего качать ваш софт, тогда они смогут однозначно определить авторство. — строго, но полностью бесплатно.

                                                        А так, если есть вопросы, помогу, чем смогу.
                                                        0
                                                        А вот интересно, если самому скачать, например, mail.ru agent, но при запуске, в окне выбрать «Never install...», на этот комп больше никогда не станет ничего подписанного mail.ru?

                                                        Only users with full accounts can post comments. Log in, please.