Code Signing: як пройти цей справжній квест для українського розробника

Усі статті, обговорення, новини про продукти — в одному місці. Підписуйтеся на на телеграм-канал!

Усім привіт, мене звати Віталій Артьомов. Моя компанія Dystlab розробляє програмне забезпечення для науково-технічної сфери. Одним з наших основних технологічних рішень є TechEditor — багатофункціональне середовище, в якому можна набирати текстову документацію, робити математичні розрахунки, працювати з інженерними звітами, програмувати.

Ми є вендором, позиціонуємось як українські розробники і маркуємо свої продукти «Made in Ukraine». Намагаємось діяти в максимально легальному полі, з точки зору як інструментів для розробки, так і кінцевого продукту. Нещодавно вирішили посилити безпеку і довіру до своїх продуктів, надавши їм відповідний цифровий підпис. Та історія виявилася значно цікавішою, ніж я собі уявляв.

Отже, ділюся з вами етапами цього квесту.

Навіщо потрібен підпис коду

Code Signing, або дослівно «підпис коду», потрібен для маркування виконуваних та інших файлів з метою підтвердити їхню цілісність і гарантувати авторство вендора.

Якщо програма не має цього підпису, то операційна система, браузер, антивірус або утиліти адміністратора можуть відмовитися працювати з нею, промаркувавши «потенційно небезпечною», «від невідомого автора» або схожим чином.

А може просто відключити?

Так, в режимі адміністратора ці заборони здебільшого можна відключити. Наприклад, натиснувши кнопку «Я розумію ризик і все рівно хочу запустити цей .EXE файл».

Проте, якщо ви розробляєте програмне забезпечення для широкого кола користувачів (а тим паче, для корпоративного сектору) — зважайте, що на такий ризик підуть далеко не всі. Або взагалі ніхто...

Той самий «синій екран», який лякає користувачів

Тож, мусимо розуміти: Code Signing це не тільки про безпеку, а й про репутацію, імідж, довіру. Пряма кореляція з маркетинговими зусиллями і продажем продукції, чи не так?

Якщо операційна система бачить підписану програму, то не залякує адміна, а навпаки, демонструє довірливу інформацію про виробника і того, хто це засвідчує. Останній фактор для нас — найважливіший.

Як підписати код

Загальна послідовність дій виглядає наступна чином:

  1. Обираємо CertificatIon Authority (CA) — центр сертифікації, який видає відповідні цифрові сертифікати. Таких агенцій в світі багато, вартість послуг різна. Можна діяти і через реселерів (розповім нижче).
  2. Сплачуємо послуги (подаємо запит на отримання цифрового сертифікату).
  3. Проходимо валідацію на відповідність вимогам центру.
  4. Отримуємо сертифікат.
  5. Підписуємо свої файли цифровим сертифікатом.

В теорії, все доволі просто. Проте на практиці можуть бути нюанси.

Хто продає сертифікати

До вибору центру сертифікації я би радив одразу поставитися відповідально, адже саме він формує вимоги до вас як клієнта.

Купувати сертифікат можна як в основному центрі сертифікації, так і у інших реалізаторів — реселерів. Більшість реселерів конкурує між собою саме за ціною послуг. Якщо купувати сертифікат безпосередньо в CA, то це — одна ціна (скажімо, $500), а у реселера той самий сертифікат можна придбати в рази дешевше (наприклад, за $100 чи ще менше).

Реселер діє за звичайним принципом роздрібного реалізатора: купує сертифікати у великих кількостях (умовним «гуртом») і отримує за це ексклюзивні знижки, що дає йому можливість призначати конкурентну вартість і заробляти на різниці.

Одразу зазначу, що крім власне вартості, нічим іншим реселер особливо вам не допоможе. Оскільки сертифікат отримуєте саме ви, то й усі документи, пов’язані з валідацією вашої особи, ви подаєте самостійно.

Реселер може допомогти вам на певних етапах щось уточнити у CA, але суттєво вплинути або прискорити цей процес — не здатен. Це начебто логічно, та хтозна, які хибні очікування можуть з’явитися у клієнта...

Чим відрізняються сертифікати

У порівнянні з SSL для сайтів, сертифікатів для Code Signing не так багато, тому їхній вибір не такий складний. Ось типовий приклад, чим саме можуть відрізнятися подібні сертифікати:

Скріншот сторінки сайту SignMyCode

Як бачимо, основними опціями тут є:

  • вартість сертифікату;
  • можливість замовити сертифікат на кілька років вперед;
  • механізм і «потужність» шифрування даних;
  • взаємодія з Microsoft SmartScreen та ін.

Більш просунуті (і, звісно, коштовні) цифрові сертифікати мають додаткові опції впливу на рейтинги у глобальних репозиторіях програмного забезпечення, а також окремі канали зв’язку з операційними системами і антивірусними сервісами, що суттєво підвищує репутацію підписаного таким чином коду.

Хоча це й виглядало для мене привабливо, коли я вивчав ці матеріали (привіт, маркетологи!), та все ж на старті вирішив зупинитися на звичайному сертифікаті, суто для засвідчення авторства і базового захисту бінарних файлів.

Спроба отримати сертифікат № 1 (невдала)

Реалізувати задумане мені вдалося лише з другої спроби. Не маючи ніякого досвіду в цій справі, я спочатку «повівся» на вартість.

В якості реселера я обрав американський сервіс SignMyCode. Ціни здалися мені відносно спокійними (навіть в порівнянні з деякими українськими сервісами). До того ж, цей ресурс має живу онлайн-підтримку, що притаманно далеко не всім американським платформам.

Ресурс SignMyCode є класичним реселером, який торгує сертифікатами різних центрів. На їхньому сайті багато інформації про те, чим відрізняються сертифікати, як їх вибрати, як працювати з ними та ін.

Як я вже казав, є у них і онлайн-чат, у якому мені пояснили, що, наприклад, сертифікати Certera і Sectigo (див. скріншот вище) практично не відрізняються, адже «Certera is Sub CA of Sectigo», тобто дочірнє підприємство. Сертифікати Sectigo раніше були відомі як Comodo.

Підготовка документів: готуйтеся, але не дійте навмання

Не розуміючи напевно, що саме від мене вимагатимуть, я підготував папку з фотокопіями наступних документів:

  • український паспорт;
  • закордонний паспорт;
  • виписка з Єдиного держреєстру про реєстрацію ФОП (українською);
  • витяг з Реєстру платників єдиного податку (українською);
  • свідоцтво про реєстрацію торговельної марки (українською).

Individual vs. Organization

Менеджер спитав, яку схему я обираю — Individual чи Organization, тобто дію як фізична чи юридична особа.

В Україні я є ФОП, тож назвався Organization, уточнив при цьому, що формально я є «individual entrepreneur».

Також я додав, що маю зареєстровану торговельну марку і хотів би підписувати своє програмне забезпечення не власним ім’ям і прізвищем, а саме найменуванням цього бренду. Менеджер ніяк це не прокоментував, натомість попросив мене надіслати йому «Legal registration link».

Мова йшла про реєстрацію мого бізнесу в одній з баз даних підприємців — Kompass або D&B (впевнений, шанувальники drum’n’bass зараз посміхнулися).

Світові довідники підприємств та компаній

Як я дізнався пізніше, бізнес за кордоном первинно аналізують за відкритими даними, наявними в подібних базах. Компанія «Dun & Bradstreet, Inc.» колись давно запропонувала, створила і веде списки різних бізнесів і підприємців, по всьому світу.

Мета — щоб їм було легше відстежувати один одного, комунікувати між собою, співпрацювати, взаємодіяти з контрагентами, тощо.

З тих пір наявність запису в цій базі де-факто є стандартом для будь-якого бізнесу, який хоче працювати зі світом. То ж у мене не було іншого шляху, як зареєструватися в D&B.

Як українцю отримати DUNS

Коли ви реєструєтеся в D&B, вам присвоюється унікальний номер — так званий D-U-N-S. Спочатку я намагався отримати його з основного сайту, але там це можливо тільки для громадян США. «Походив» європейськими гілками, але української так й не знайшов. Відправив електронного листа в загальну підтримку (англійською), але на душі стало неспокійно)

Витративши певний час на глобальний пошук, я врешті-решт натрапив на українське представництво Інтерфакс-Україна, яке, як виявилося, головує в цій темі. Це вельми неочікувано, адже Інтерфакс в своїй основі є російським інформаційним агентством.

Виходить, що бази даних українських бізнесів перебувають під контролем росії? Принаймні ті з них, які пов’язані з D&B (а це, зважайте, — основна світова мережа). Привіт, безпека!

Запит на отримання DUNS для українців відбувається за формою на сайті або телефоном (044). Триває ця процедура доволі швидко: якщо пощастить, то отримаєте електронного листа з номером того ж дня.

Послуга за присвоєння DUNS — безкоштовна, але менеджер Інтерфаксу подзвонив мені і спробував допродати додаткові послуги (як-от розробка аналітичного звіту про діяльність моєї компанії). Дякую, поки не треба.

Спілкуються менеджери Інтерфакс-Україна ввічливо, але виключно російською; розуміють мою українську, але принципово не переходять на неї ані в листуванні, ані у розмовах.

Зауваження щодо персональних даних для DUNS

Коли мені треба перекласти ім’я та прізвище англійською, я орієнтуюся на закордонний паспорт. Це моє власне правило, яке спрощує процеси і мінімізує бюрократичні помилки.

Якщо ви отримуєте DUNS на власне ім’я, то воно заноситься в базу даних латинською транслітерацією. Я подавав запит на отримання номеру українською; листування з менеджером також відбувалося українською (російською, з його боку).

Як правильно пишеться моє ім’я і прізвище англійською, у мене на той момент ніхто не спитав. Пізніше я з’ясував, що система D&B робить власну транслітерацію і менеджер, який заносить туди локалізовані дані (національною мовою), на це не впливає.

В моєму випадку пізніше це призвело до прикрої невідповідності офіційних документів даним D&B, і я був змушений просити менеджера виправити мої персональні дані в базі D&B.

Це виявилося доволі просто і швидко (дивно, чому не запитали одразу), але менеджер зауважив, що не гарантує, що система згодом не поверне початковий варіант. Каже, такі випадки у них дуже часті, і я звісно не перший, хто з цим стикається.

Отже, моя порада: коли будете відправляти запит на отримання DUNS, одразу зазначте, як пишеться ваше ім’я, прізвище і по-батькові англійською. Бажано, щоб це збігалося з даними закордонного паспорту.

Глобальний довідник підприємств Kompass

Окрім D&B, існує ще одна база — Kompass. Це також глобальний B2B онлайн-довідник підприємств, у якому можна зареєструватися безкоштовно. Особисто для мене ця реєстрація не вплинула на отримання сертифікату, то ж повернемось до основного сюжету.

Взаємодія з CA «Sectigo»

Як я писав вище, реселер є лише посередником між вами і центром сертифікації.

Сплативши вартість сертифікату наперед, я побачив, що статус замовлення в акаунті на сайті SignMyCode змінився на «очікування». Це означає, що реселер передав мій запит до CA і далі я маю взаємодіяти з CA вже напряму.

В центрі сертифікації Sectigo через електронну пошту у мене запросили певний набір даних щодо мого бізнесу. Відчувши, що щось йде не так, я зв’язався з агентом Sectigo для з’ясування деталей чатом.

Агент одразу попросив уточнити, чи дійсно я є «Organization». Я пояснив, що маю наміри підписувати свої розробки назвою торговельної марки і є зареєстрованим підприємцем, а не фізичною особою. Агент, не залишаючи маневрів для обговорення, перевів мене в статус «sole proprietor», тобто індивідуальний підприємець. В цей момент трохи відчулось дежавю, але OK.

Face-to-Face Verification

Наступним кроком агент скинув мені посилання на правила персональної ідентифікації. Ось фрагмент цього документу (повний перелік умов значно більший):

Це так звана «Face to Face Verification Form for Extended Validation (EV) and Code Signing Certificates», тобто розширена валідація особи. Є ще звичайна, але на той момент мені її ніхто не запропонував. А мали б!

Потягнулися довгі години переписок з агентом, які згодом трансформувалися в дні. В силу відмінностей юридичної системи (і менталітету) США і України, агент намагався «затулити» мені своє бачення і вимагав зробити все так, як це роблять вони.

Наприклад, мій український паспорт його не задовольнив — потрібен юридично завірений переклад. Кажу «юридично», а не «нотаріально», бо як пояснили мені наші юристи, в США нотаріальні обов’язки виконують звичайні юристи (lawyer). Вважаючи що так усюди, агент скинув мені посилання на Асоціацію правників України, які, на його думку, мають право завіряти переклад офіційних документів.

Я почав шукати юриста, який може це зробити. На щастя, їх в тому переліку доволі багато. Проте перший же юрист, до якого я звернувся, пояснив мені, що американський представник не розуміє специфіки українського права і завіряти документи у нас — функція нотаріусу. Мінус одна проблема, але плюс кілька нових.

Я почав з перекладу українського паспорту. Переклад паспорту з нотаріальним засвідченням обійшовся мені приблизно в $20. Sectigo прийняли цей документ і я вирішив, що рухаюся в правильному напрямку.

Наступним кроком була ідентифікація особи через відео. Відбувається це так: на окремому онлайн-сервісі ви відправляєте заявку, в якій вказуєте дату і час, коли будете на зв’язку. Вам дзвонить менеджер, просить увімкнути вебкамеру, покрутитися, наблизитися і таке інше. Триває процедура не більше 10 хвилин.

Забирайте гроші, якщо щось іде не так

Після цього я кілька днів очікував на відповідь від CA. Розуміючи, що нічого не відбувається, я спробував дізнатися про хід справ у агента. Звісно, на зв’язок вийшов інший агент (стандартна ситуація в онлайн-підтримці), який дивився на все це, як з чистого аркуша. Апофеозом стало питання, чи маю я DUNS...

Місяць, за який я ще встигав повернути кошти від реселера, добігав кінця. Я прийняв рішення відкотити замовлення і забрав гроші. Потрібна була пауза щоб зрозуміти, як діяти далі.

Спроба отримати сертифікат № 2 (вдала)

Повторну спробу отримати сертифікат я зробив лише через кілька місяців.

Українці — найкращі!

На цей раз я вирішив діяти через українського реселера. Сертифікат коштував трохи дорожче, ніж в США, але моя ставка була на те, що українська технічна підтримка принаймні мене зрозуміє. Ця ставка виправдалась на 100%.

Перш ніж сплатити замовлення, я довго мучив своїх українських колег питаннями, про які писав вище. Тепер я розумію, чому вони так дивувалися і переконували мене, що проблем не має статися.

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

Взаємодія з CA «Certum»

Процедура валідації особи в Certum дійсно виявилася значно простішою. Фактично, знадобився лише мій закордонний паспорт.

Візуальна ідентифікація в Certum відбувається автоматично: на електронну пошту надходить посилання, ви відкриваєте його зі смартфона, направляєте камеру на себе і далі виконуєте нескладні інструкції.

Все в автоматичному режимі, взагалі без участі живого оператора. Я спочатку навіть не повірив, що все так просто)

І знову про DUNS-номер

У мене були всі шанси отримати сертифікат в рекордно короткі строки, якби не DUNS.

Вище я розповідав про важливість співпадіння персональних даних. На цей раз, менеджери CA не просили у мене ніяких DUNS-номерів, натомість надіслали листа, де кілька разів перепитали, чи правильно я вказав ім’я і прізвище в реєстраційній формі (на старті). Разом з реселером ми збагнули, що вони скористалися пошуком в D&B і помітили відмінності.

Зважайте, що після отримання, ваш DUNS-номер працює ніби «в фоні»: у компаній є доступ до бази і вони спокійно моніторять вас, без вашого відома.

Отже, за запитом я змінив персональні дані в базі D&B і сповістив про це Certum. Все одразу стало на свої місця. Протягом кількох днів я отримав омріяний сертифікат. Евріка!

Як підписати файли цифровим сертифікатом

Ця частина оповіді може бути не такою цікавою, як попередні, але вона точно допоможе початківцям, які ніколи цього не робили (як-от я сам, до недавнього часу).

Як виглядає сертифікат

Фізично сертифікат — текстовий файл з розширенням .CER, який навіть можна переглянути, клацнувши по ньому мишею:

Можуть бути й інші розширення, наприклад PFX.

Щоб підписати файли сертифікатом, нам знадобиться спеціальна утиліта. Їх в світі існує певна кількість — signtool, jarsigner та ін. Програма signtool поставляється разом з пакетом розробки Windows Kits, тому вважається стандартною для Windows.

Робота з SignTool

На сайті Certum є детальні інструкції, як працювати з signtool та jarsigner. Але нюанс в тому, що навіть за наявності самого сертифікату, ви не можете підписати ним свої файли — потрібен додатковий ключ безпеки.

За типовою схемою Certum, цим ключем є спеціальна картка, яка фізично втикається в USB-порт. Наскільки я розумію, це більш серйозний, корпоративний підхід (ця картка коштує певну суму).

В моєму випадку, мова йшла про онлайн-сертифікат. Тобто я, по суті, придбав не стільки фізичний файл (бо він тут не зарадить), а віртуальний, який «лежить» в моєму акаунті на сервері Certum. Його можна завантажити собі на комп’ютер, але в цьому немає сенсу.

Щоб скористатися цим онлайн-сертифікатом, потрібно завантажити і встановити десктопний застосунок SimplySign Desktop. Паралельно з тим, ви маєте встановити на смартфон мобільний застосунок SimplySign, який кожну хвилину генерує ключі для авторизації.

Запускаєте SimplySign Desktop, вводите електронну пошту (логін) і числовий токен, який в даний момент згенерував мобільний застосунок:

Після успішної авторизації, SimplySign Desktop занурюється в трей і автоматично підтягує ваші наявні сертифікати.

Приклад командного файлу для цифрового підпису файлів

Для пакетного підписання файлів зручно створити BAT-файл, наприклад «signfiles.bat». Приклад вмісту такого файлу:

signtool sign /sha1 «0f************************74» /t http://time.certum.pl /fd sha256 /v «project1/lib1.dll»
signtool sign /sha1 «0f************************74» /t http://time.certum.pl /fd sha256 /v «project1/lib2.dll»
signtool sign /sha1 «0f************************74» /t http://time.certum.pl /fd sha256 /v «project1/program.exe»

Що тут що:

  • «0f************************74» — номер вашого сертифікату (в лапках);
  • http://time.certum.pl — сервер фіксування часу;
  • «project1/lib1.dll» — файл, який потрібно підписати.

Значення інших директив signtool ви можете переглянути в довідці Microsoft.

Запустивши сформований .bat на виконання, ви маєте побачити вікно консолі з успішно виконаними завданнями за кожним файлом. Відповідно, після роботи signtool можна переконатись, що цифровий сертифікат дійсно прикріпився до файлу:

Властивості файлу, підписаного цифровим сертифікатом

***

Сподіваюсь, цей матеріал допоміг вам, або принаймні не був занудним)

Діліться своїм досвідом в коментарях.

Успіхів!

👍ПодобаєтьсяСподобалось12
До обраногоВ обраному3
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Дуже корисно, дякую! Я забив на сертіфікат коли з декількох спроб по першому варіанту мене той менеджер мало до сказу не довів розширеною валідацією особи

Оце ж воно, я зрозумів що на першому кейсі не я один спинився. Дякую за фідбек!

Корисна стаття на DOU, неочікувано)

Підписатись на коментарі