Какво се случва, когато сертификатът за подписване на код изтече?

Обмислям закупуването на сертификат за подписване на код от VeriSign или Thawte, с който да подпиша XBAP. Въпросът ми е следният: Какво се случва, когато този сертификат изтече? $299 и $599 са доста солидни цени за 1-годишни/2-годишни сертификати и ако трябва да доставя новоподписана компилация на клиентите си, когато сертификатът ми изтече, тогава просто ще се справя с неприятностите по създаването на собствен сертификат за сега.

Това, което не ми харесва в създаването на собствен сертификат, е трудността при разпространението му до всички клиентски машини, които ще използват моя XBAP. Приложението ми ще бъде използвано само в LAN, така че предполагам, че винаги мога да използвам Windows Installer, за да инсталирам своя домашно приготвен сертификат (въпреки че не съм сигурен как да направя това - някой има ли идеи?).

Това наистина не би било проблем, ако доставях приложение с частично доверие - но приложението ми се нуждае от уеб разрешения, тъй като ще говори с WCF услуги, така че е в тази сива зона между частично доверие и пълно доверие и без сертификат, получавам онова забавно съобщение Trust Not Granted, когато се опитам да заредя своя XBAP.

Някакви идеи?


person Rob    schedule 30.11.2008    source източник
comment
www.CACert.org е организация с нестопанска цел, която предлага сертификати за подписване на код безплатно на доверени лица.   -  person cjakeman    schedule 02.05.2009
comment
FF съобщение: www.cacert.org използва невалиден сертификат за сигурност. Сертификатът не е надежден, защото сертификатът на издателя е неизвестен.   -  person HTTP 410    schedule 10.06.2009
comment
Използвайте KSoftware. Стендъп човек, съществува от години, познавам го лично. codesigning.ksoftware.net   -  person Nico Westerdale    schedule 07.01.2019
comment
Comodo е доста известен в индустрията. Те продават сертификати за подписване на код на $70,83 на година. Също така беше споменато от BCran по-долу.   -  person Franklin Yu    schedule 28.04.2019


Отговори (8)


Това, което трябва да направите, ако планирате да го използвате в затворена (LAN) среда, е да настроите свой собствен CA. Версиите на Windows Server включват лесен за използване сертифициращ орган, но още по-лесно е да настроите минимален CA с помощта на demoCA, предоставен от openssl, който се състои от няколко скрипта. Можете да стартирате openssl demoCA в Cygwin под Windows или нативно. Този demoCA се състои от няколко perl/bash скрипта, които извикват openssl команди за генериране на заявки, подписване на сертификати/crl и т.н.

Когато имате собствен CA, това, което трябва да инсталирате, е основният сертификат на CA, така че няма да има повече проблеми с актуализирането на потребителските сертификати, тъй като CA сертификатът ще остане същият. Обикновено CA сертификатът трябва да продължи 5-10 години, но можете да конфигурирате колкото искате (не забравяйте, че това е ваш собствен CA).

CA сертификатът ще бъде инсталиран на всяка клиентска машина. Ако вашето приложение се доверява на сигурността на системата на Windows, то трябва да бъде инсталирано в хранилището за ключове на сертифициращите органи на IExplorer. Ако използвате Java приложение, трябва да разпространите CA сертификата в хранилището за ключове на Java, което използвате.

person Fernando Miguélez    schedule 30.11.2008
comment
Благодаря, Фернандо - малко съм объркан обаче - как CA сертификатът се инсталира на всяка клиентска машина? Трябва ли да се прави ръчно? - person Rob; 01.12.2008
comment
да Най-директният подход е да го направите ръчно. Просто запазете сертификата си с разширение .cer или .der. Щракнете два пъти върху него и Windows ще ви представи съветник за импортирането му. - person Fernando Miguélez; 01.12.2008
comment
Цялата добра информация, но какво се случва, когато сертификатът за подписване на код изтече? - person Bratch; 27.05.2009
comment
Лесно, вашият подпис (код или каквото и да е) вече не е валиден, тъй като сертификатът не преминава дори локално валидиране (датата на изтичане е една от първите характеристики на сертификата за проверка) - person Fernando Miguélez; 27.05.2009
comment
Да, това, което откривам, е, че трябва да използвате услуга за цифрово времево клеймо, ако искате да избегнете необходимостта да преподписвате кода си на всеки X години. stackoverflow.com/questions/912955/ - person Bratch; 28.05.2009
comment
Така че, когато изтече, не само не можете да подпишете нов код, но и старият вече подписан код вече не е валиден, нали? - person BrainSlugs83; 16.01.2014
comment
Второ, може ли сертификатът просто да бъде подновен? -- или трябва да възстановите/преподпишете кода и хората да инсталират новата версия на вашия продукт? - person BrainSlugs83; 16.01.2014

Ако маркирате кода си с време, докато сертификатът е валиден ефектът е, че вашите изтекли сертификати са добри.

От Често задавани въпроси за сертификат за подписване на код Thawte:

Колко дълго мога да използвам сертификат за подписване на код?

  • Сертификатите за подписване на код са валидни за 1 или 2 години в зависимост от жизнения цикъл, който изберете, когато купувате сертификата. Моля, обърнете внимание: За Microsoft® Authenticode® (Multi-Purpose) трябва също така да поставите времево клеймо на подписания си код, за да избегнете изтичането на кода ви, когато изтече валидността на вашия сертификат.

Кодът с времево клеймо валиден ли е след изтичане на валидността на сертификата за подписване на код?

  • Microsoft® Authenticode® (Multi-Purpose) ви позволява да поставите времево клеймо на вашия подписан код. Времевото клеймо гарантира, че кодът няма да изтече, когато сертификатът изтече, тъй като браузърът потвърждава клеймото за време. Услугата за маркиране на времето се предоставя с любезното съдействие на VeriSign. Ако използвате услугата за клеймо за време, когато подписвате код, хеш на вашия код се изпраща до сървъра на VeriSign, за да запише клеймо за вашия код. Софтуерът на потребителя може да прави разлика между код, подписан с изтекъл сертификат, на който не трябва да се вярва, и код, който е подписан със сертификат, който е бил валиден по време на подписването на кода, но който впоследствие е изтекъл.
person Martin Vobr    schedule 06.08.2010
comment
Това е правилният отговор, разбира се. Трябва да използвате доверен партньор и цифрово времево клеймо, така че приложението ви да остане валидно ad vitam, след като бъде подписано. - person Gui13; 22.11.2016
comment
Ако погледнете свойствата на двоичния файл след изтичане на кода, той все още има ли раздел за цифров подпис? - person Kyle Delaney; 23.05.2018
comment
Обърнете внимание на моя отговор на Windows Defender по-долу. Не искате вашият сертификат да изтече, така че вземете 10-годишен. - person Tuntable; 26.08.2020

Внимавайте за сертификати с WTD_LIFETIME_SIGNING_FLAG: Това означава (въпреки това, което предполагате от името), че програма, подписана със сертификата, е невалидна след изтичане на сертификата, въпреки че програмата не е променена, и сертификатът е бил валиден, когато е бил подписан.

Това също засяга актуализациите, тъй като дори ако клиентът постави отметка в квадратчето, за да се довери на всички програми от вашата компания, ако вашата програма за актуализация не е подписана със същия сертификат (или този сертификат изтича), тогава доверието се проваля.

От: http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Authenticode_PE.docx


Обработка на времево клеймо със семантика на подписване през целия живот

Приложенията или сертифициращите органи, които не желаят подписи с щамповани време и време да се проверяват успешно за неопределен период от време, имат две възможности:

• Задайте доживотния OID на подписващия в подписващия сертификат на издателя.

Ако подписващият сертификат на издателя съдържа доживотния OID на подписващия в допълнение към OID за подписване на PKIX код, подписът става невалиден, когато сертификатът за подписване на издателя изтече, дори ако подписът е с времеви печат. Доживотният OID на подписващия се дефинира, както следва:

szOID_KP_LIFETIME_SIGNING 1.3.6.1.4.1.311.10.3.13

• Задайте WTD_LIFETIME_SIGNING_FLAG в структурата WINTRUST_DATA, когато извиквате WinVerifyTrust.

Ако извикващ WinVerifyTrust зададе WTD_LIFETIME_SIGNING_FLAG в структурата WINTRUST_DATA и подписващият сертификат на издателя е изтекъл, WinVerifyTrust отчита подписа като невалиден, дори ако подписът е с времеви печат.

Ако издател отмени сертификат за подписване на код, който съдържа доживотния OID на подписващия или извикващ WinVerifyTrust задава WTD_LIFETIME_SIGNING_FLAG в структурата WINTRUST_DATA, WinVerifyTrust отчита подписа като валиден, ако са изпълнени и двете от следните условия:

• Подписът е с дата на подписа преди датата на отмяна.

• Сертификатът за подписване все още е в срок на валидност. След изтичане на срока на валидност подписът става невалиден.


Например: https://forum.startcom.org/viewtopic.php?f=15&t=2215&p=6827&hilit=lifetime+signing#p6827

Това е сериозен проблем със сертификатите StartSSL. Не ме изненадва, че има ограничения в сертификат, който струва толкова малко, но заравянето на това ограничение в дребния шрифт или в стара публикация във форума, вместо да бъде изяснено в описанието на продукта, е лоша работа. Те може да го поправят в бъдеще, а други може или не могат да имат същото ограничение, така че имейл, който да проверите, преди да харчите, може да е разумно.

Познайте кой не знае да попита? LOL... добре, живей и се учи.

person James Newton    schedule 16.03.2011
comment
Линкът към форума на startcom е мъртъв. Ето архивираната версия: http://web.archive.org/web/20160405182742/https://forum.startcom.org/viewtopic.php?f=15&hilit=lifetime+signing&p=6827&t=2215 - person maf-soft; 23.10.2016
comment
Така че... наистина е обратното на това, което подсказва името. Проектиран от Microsoft? - person Suncat2000; 29.09.2020

Ако се уверите, че сте добавили печат за време, когато подписвате двоични файлове, няма да се налага да ги подписвате отново, когато сертификатът изтече. Просто добавете "/t http://timestamp.verisign.com/scripts/timstamp.dll" към командния ред на signtool и цифровият подпис винаги ще бъде маркиран като валиден, освен ако сертификатът не е отменен и CA е доверен.

Сертификатите за подписване на код на причина са толкова скъпи, че някой трябва да потвърди, че сте този, за който се представяте. В моя случай те провериха адреса и телефонния номер и ми се обадиха. Сертификатите на Comodo обаче изглеждат малко по-евтини.

person BCran    schedule 04.08.2010
comment
Може ли някой да потвърди, че URL адресът на клеймото на VeriSign, предоставен по-горе, е валиден само за сертификати на VeriSign? Това е моето предположение. - person Will Bickford; 17.11.2011
comment
Ще: не, ще работи за сертификати от всеки доставчик. Използвал съм го с моя сертификат Globalsign. - person BCran; 18.11.2011

Просто имах този проблем. Намерих в тази статия обяснението и заедно с отговора на @BCran го реших. Резюме:

  • Сертификатът по подразбиране трябва да е валиден по време на проверка (когато клиентът отвори програмата, а не по време на компилиране)
  • За да бъде сертификатът валиден завинаги, трябва да подпишете програмата с помощта на TimeStamping сървър. Това потвърждава, че не сте променили часа на компютъра си и не сте използвали стар сертификат. Ако използвате TimeStamping сървър, няма да е необходимо да преподписвате кода си всеки път.

Ето как бихте го направили във VS.NET 2017 например:

code signing visual studio 2017

Ако URL адресът не работи, можете да използвате всяка услуга, ето куп URL адреси, които работят: https://stackoverflow.com/a/9714864/72350

person Diego Jancic    schedule 24.09.2019

ВНИМАВАЙТЕ С WINDOWS DEFENDER.

Никога не искате вашият сертификат да изтече или колкото е възможно по-дълго, което изглежда е 10 години.

След като вашият сертификат изтече, Windows няма да разпознае заместващ сертификат като такъв. Вашите приложения отиват в края на опашката, сякаш са подписани от съвсем различна организация.

Това означава, че потребителите ще получат неприятни съобщения, ако изтеглят, и може изобщо да не могат да изпълнят вашия код в зависимост от груповите правила. Това ще продължи, докато голям брой различни хора не обърнат внимание на ужасните предупреждения и не инсталират вашия софтуер.

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

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

person Tuntable    schedule 26.08.2020

BCran написа: Сертификатите за подписване на код на причина са толкова скъпи, че някой трябва да потвърди, че сте този, за който се представяте.

Наречете ме глупав, но някой мислил ли е за идеята, че разработчиците могат да направят свои собствени изчисления на точния размер на своите изпълними приложения по време на изграждането им и дали да включват самоличността на разработчика с изчисленото число, вмъкнете хеш номера в шифрована форма с приложението и решете дали да ограничите приложението във времето или да го накарате да работи завинаги (тъй като изпълнимият код, който вече е на машината на потребителя, е малко вероятно да се влоши или промени сам след 1, 3, 5, 10 , 100, 1 милион години)?

Освен това няма значение дали някой може да потвърди вашия телефонен номер и/или адрес. Тези неща могат да се променят много лесно, ако разработчикът избере, но не и кодът на приложението.

Предимство: Изпълнението на тази задача не струва нищо на разработчика. В същото време потребителите все още могат да бъдат сигурни за валидно и безопасно приложение, докато желаят да го използват (или им е позволено да го използват от разработчика) и приложението остава непроменено. Или трябва големите играчи, като Apple и Microsoft и издателите на сертификати, да убеждават разработчиците да приемат да плащат непрекъснато за тази услуга?

ЗАБЕЛЕЖКА: Моето наивно и първоначално разбиране за приложение, подписано с код, е да се предотврати подправяне на кода на приложението от никого. Но колкото повече гледам това, изглежда повече, че това е възможност за физически лица и организации от трети страни да правят пари от разработчиците, от богатите и не толкова богатите. Добре, някой трябва да свърши работата, опитвайки се да разбере, че сте това, което сте. Но огромните разлики в цените, които виждам в интернет за тази услуга, и толкова голямото наблягане на периоди от 1 или 3 години без опция за постоянно доживотно подписано приложение предполагат, че имаме хора с много скъпи офиси в града, които да плащат наем и солидните им заплати.

Защо разработчиците не изискват решение за сигурност от Apple и Microsoft, което е много по-щадящо за джобовете на разработчиците и също толкова сигурно и безопасно за потребителите? Или дайте точния размер в байтове на окончателния инсталационен файл на уеб сайта на разработчика по време на изтегляне и потребителите могат да проверят. Всяко допълнително или загуба на байтове от това, което е посочено, трябва да е достатъчно, за да каже на потребителите, че има проблем. Принудете разработчиците да имат собствен уеб сайт, така че всеки да може да види кои са и къде да получи легитимно и неподправено копие на софтуера и да сложи край на сайтовете за изтегляне на софтуер, които грабват копия на софтуера за разработчици, за да ги изтеглят от своите сайтове. Всичко трябва да се прави от сайта на разработчика и никъде другаде.

person StrangeWorld    schedule 23.12.2020

Сертификатите за подписване на код не се „управляват“, което означава, че не се актуализират сами... шансовете са, че трябва да закупите нов, след като изтече.

Можете да настроите сертифициращ орган (CA) - стик с базиран на Windows CA, ако сте магазин само за Windows, но в противен случай бих препоръчал Linux с нещо като Система за сертификати DogTag.

Имайте предвид, че ако създадете свой собствен CA, ще трябва да експортирате публичния CA сертификат и да го инсталирате (така че да се доверява като основен CA) на всеки сървър, който ще изпълнява код/скриптове, подписани от сертификат за подписване на код, издаден от този CA. Това е много, много по-евтино (безплатно?) в сравнение с плащането за сертификат на всеки X години - да не говорим за другите сертификати, които можете да издадете по различни причини/употреби!

person static    schedule 30.04.2013