Code Signing: як пройти цей справжній квест для українського розробника
Усі статті, обговорення, новини про продукти — в одному місці. Підписуйтеся на на телеграм-канал!
Усім привіт, мене звати Віталій Артьомов. Моя компанія Dystlab розробляє програмне забезпечення для науково-технічної сфери. Одним з наших основних технологічних рішень є TechEditor — багатофункціональне середовище, в якому можна набирати текстову документацію, робити математичні розрахунки, працювати з інженерними звітами, програмувати.
Ми є вендором, позиціонуємось як українські розробники і маркуємо свої продукти «Made in Ukraine». Намагаємось діяти в максимально легальному полі, з точки зору як інструментів для розробки, так і кінцевого продукту. Нещодавно вирішили посилити безпеку і довіру до своїх продуктів, надавши їм відповідний цифровий підпис. Та історія виявилася значно цікавішою, ніж я собі уявляв.
Отже, ділюся з вами етапами цього квесту.
Навіщо потрібен підпис коду
Code Signing, або дослівно «підпис коду», потрібен для маркування виконуваних та інших файлів з метою підтвердити їхню цілісність і гарантувати авторство вендора.
Якщо програма не має цього підпису, то операційна система, браузер, антивірус або утиліти адміністратора можуть відмовитися працювати з нею, промаркувавши «потенційно небезпечною», «від невідомого автора» або схожим чином.
А може просто відключити?
Так, в режимі адміністратора ці заборони здебільшого можна відключити. Наприклад, натиснувши кнопку «Я розумію ризик і все рівно хочу запустити цей .EXE файл».
Проте, якщо ви розробляєте програмне забезпечення для широкого кола користувачів (а тим паче, для корпоративного сектору) — зважайте, що на такий ризик підуть далеко не всі. Або взагалі ніхто...
Тож, мусимо розуміти: Code Signing це не тільки про безпеку, а й про репутацію, імідж, довіру. Пряма кореляція з маркетинговими зусиллями і продажем продукції, чи не так?
Якщо операційна система бачить підписану програму, то не залякує адміна, а навпаки, демонструє довірливу інформацію про виробника і того, хто це засвідчує. Останній фактор для нас — найважливіший.
Як підписати код
Загальна послідовність дій виглядає наступна чином:
- Обираємо CertificatIon Authority (CA) — центр сертифікації, який видає відповідні цифрові сертифікати. Таких агенцій в світі багато, вартість послуг різна. Можна діяти і через реселерів (розповім нижче).
- Сплачуємо послуги (подаємо запит на отримання цифрового сертифікату).
- Проходимо валідацію на відповідність вимогам центру.
- Отримуємо сертифікат.
- Підписуємо свої файли цифровим сертифікатом.
В теорії, все доволі просто. Проте на практиці можуть бути нюанси.
Хто продає сертифікати
До вибору центру сертифікації я би радив одразу поставитися відповідально, адже саме він формує вимоги до вас як клієнта.
Купувати сертифікат можна як в основному центрі сертифікації, так і у інших реалізаторів — реселерів. Більшість реселерів конкурує між собою саме за ціною послуг. Якщо купувати сертифікат безпосередньо в CA, то це — одна ціна (скажімо, $500), а у реселера той самий сертифікат можна придбати в рази дешевше (наприклад, за $100 чи ще менше).
Реселер діє за звичайним принципом роздрібного реалізатора: купує сертифікати у великих кількостях (умовним «гуртом») і отримує за це ексклюзивні знижки, що дає йому можливість призначати конкурентну вартість і заробляти на різниці.
Одразу зазначу, що крім власне вартості, нічим іншим реселер особливо вам не допоможе. Оскільки сертифікат отримуєте саме ви, то й усі документи, пов’язані з валідацією вашої особи, ви подаєте самостійно.
Реселер може допомогти вам на певних етапах щось уточнити у CA, але суттєво вплинути або прискорити цей процес — не здатен. Це начебто логічно, та хтозна, які хибні очікування можуть з’явитися у клієнта...
Чим відрізняються сертифікати
У порівнянні з SSL для сайтів, сертифікатів для Code Signing не так багато, тому їхній вибір не такий складний. Ось типовий приклад, чим саме можуть відрізнятися подібні сертифікати:
Як бачимо, основними опціями тут є:
- вартість сертифікату;
- можливість замовити сертифікат на кілька років вперед;
- механізм і «потужність» шифрування даних;
- взаємодія з 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 можна переконатись, що цифровий сертифікат дійсно прикріпився до файлу:
***
Сподіваюсь, цей матеріал допоміг вам, або принаймні не був занудним)
Діліться своїм досвідом в коментарях.
Успіхів!
4 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів