Як підписати драйвери у Windows крок за кроком

Останнє оновлення: 17/12/2025
Автор: Ісаак
  • Windows Для забезпечення цілісності та безпеки потрібні дійсні цифрові підписи для більшості 64-бітних драйверів, особливо драйверів режиму ядра.
  • Підпис можна застосовувати як до двійкових файлів, так і до каталогів, використовуючи такі інструменти, як SignTool або Visual Studio, та сертифікати, видані довіреними організаціями.
  • Самопідписані сертифікати полегшують розробку та тестування драйвери непідписаний Windows 78.1 та 10 x64, але вони не замінюють комерційний підпис для публічного розповсюдження.
  • Сумісність між версіями Windows залежить від використання відповідних алгоритмів хешування (таких як SHA2) та дотримання рекомендацій Microsoft і WHQL.

підпис драйверів у Windows

Підписання драйвера у Windows на перший погляд може здатися чимось, що можуть зробити лише дуже досвідчені розробники, але якщо ви працюєте з пристрої, користувацькі драйвери або тестові середовищаРано чи пізно ви зіткнетеся з цією вимогою. У сучасних системах, особливо 64-розрядних, Windows більше не довіряє будь-якому бінарному файлу, який намагається проникнути в ядро: їй потрібні дійсні цифрові підписи, сучасні алгоритми, такі як SHA2, і, в багатьох випадках, сертифікація від Microsoft.

У наступних рядках ми спокійно розглянемо, що саме означає підписати контролер, які відмінності існують між... режим ядра та режим користувачаЯк це впливає на 64-розрядні Windows 7, 8, 8.1 та 10, яку роль відіграють такі інструменти, як SignTool або Visual Studio, та які опції ви маєте як для середовищ розробки (тестові або самопідписані сертифікати), так і для публічних релізів із сертифікатами, виданими довіреним центром.

Що таке підписування драйверів у Windows і чому воно обов'язкове?

Підписування драйверів у Windows передбачає пов'язування цифровий підпис пакета драйверів (бінарні файли, INF-файли, каталог тощо), щоб гарантувати дві речі: що ніхто не маніпулював файлами з моменту їх створення та що вони дійсно походять від зазначеного видавця (постачальника програмного забезпечення або виробника апаратні засоби).

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

Починаючи з 64-розрядної версії Windows Vista, і особливо у Windows 7, 8, 8.1 та 10 x64, політика безпеки в режимі ядра чітка: будь-який драйвер, який запускатиметься в ядрі Він має бути належним чином підписаний.В іншому випадку драйвер не завантажиться, пристрій може вийти з ладу, а сині екрани можуть навіть виникати, якщо примусово завантажити недійсні бінарні файли.

Коли ви вирішите сертифікувати свій драйвер у Microsoft, ви можете подати його на процес перевірки в Лабораторії якості обладнання Windows (WHQL). Якщо пакет драйверів проходить сертифікаційні тести, Microsoft надає свою сертифікацію. офіційний підпис WHQLЦе не лише покращує довіру та сумісність, але й дозволяє розповсюджувати драйвер через Служба Microsoft Windows та інші канали розповсюдження, що підтримуються Microsoft.

Важливо пам’ятати, що починаючи з Windows 10 версії 1507, усі драйвери, підписані через Центр розробки обладнання Microsoft, підписуються за допомогою SHA2 як алгоритм хешуванняSHA1 став застарілим для цих сценаріїв, а змішування старих сертифікатів може спричинити проблеми, особливо на новіших системах.

Пояснення підпису драйвера у Windows

Різниця між підписанням драйверів у режимі ядра та режимі користувача

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

  Чому ваш комп’ютер з Windows з часом стає повільнішим? Усі причини пояснено

Драйвери режиму ядра є найбільш чутливими, оскільки вони працюють у ядрі системи та мають привілейований доступ до пам'яті та обладнання. У 64-розрядних версіях Windows Vista та пізніших версіях ці драйвери Вони обов'язково мають бути підписані щоб стягувати плату. Це обмеження безпосередньо пов'язане зі стабільністю системи та захистом від шкідливих програм що він намагається впорскувати на низькому рівні.

З іншого боку, драйвери, що працюють у режимі користувача (наприклад, багато драйверів принтерів та додаткових компонентів), спочатку не підпадали під такі суворі вимоги. Фактично, у старіших версіях Windows Це не було абсолютною вимогою що ці драйвери мають бути підписані. Однак Microsoft завжди рекомендувала підписувати їх з міркувань безпеки, і, починаючи з Windows 8, існують сценарії, в яких підписання потрібне для певних типів драйверів користувача.

Типовий приклад: драйвер принтера, встановлений на комп'ютері x64, зазвичай відображає діалогове вікно під час процесу встановлення із запитом на підтвердження користувача. На практиці цей пакет Він має бути належним чином підписаний щоб встановлення могло продовжуватися без блокувань або критичних сповіщень безпеки.

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

Вимоги до підпису та алгоритми SHA в різних версіях Windows

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

У старіших системах, таких як 64-розрядна Windows 7 або 8, було поширеною практикою робота з сертифікатами та підписами на основі SHA1, хоча Microsoft вже попереджала про це. SHA1 не відповідав вимогам безпекиЗ розвитком Windows 8.1 та 10, SHA2 став стандартом для підписів коду та драйверів.

На практиці деякі виробники вирішили підписувати бінарні файли в режимі ядра, вбудовуючи подвійні сертифікати (SHA1 та SHA2), видані іншими організаціями, ніж Microsoft. Ці бінарні файли з подвійним підписом, у певних випадках, Вони не завантажуються у версіях до Windows 10а в деяких системах Windows 10 вони навіть можуть спричиняти серйозні збої або сині екрани.

Щоб вирішити ці проблеми, Microsoft випустила спеціальні виправлення, такі як оновлення KB 3081436. Інсталяція цього оновлення на уражені системи виправляє несумісність з певними драйверами, підписаними SHA2, і надає список… посилання на хеш-значення SHA у розділі «Додаткова інформація – Інформація про хеш файлу» цієї статті служби підтримки.

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

  Як вводити символи ASCII з клавіатури в Windows крок за кроком

Підпис драйверів у режимі користувача: рекомендації та ресурси

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

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

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

Крім того, інсталяційний пакет драйверів Windows (WDK) містить файл довідки під назвою selfsign_readme.htm, що знаходиться в каталозі самопідписУ цьому документі пояснюється, як створювати тестові сертифікати та як використовувати їх під час розробки, що особливо корисно, коли у вас ще немає сертифіката, виданого довіреним кореневим центром.

Підсумовуючи, хоча драйвер користувацького режиму технічно може функціонувати без підпису в деяких сценаріях, його слід розглядати як обов'язковий. Це пов'язано з безпекою, іміджем бренду та сумісністю з майстрами інсталяції Windows. Підписати водія – це найрозумніше, що можна зробити..

Підписання драйверів режиму ядра у Windows 7 та 8 за допомогою SignTool

Під час роботи з 64-розрядними Windows 7 та 8 одним із найпоширеніших підходів до підписання драйверів режиму ядра є використання інструмента командного рядка. Команди SignToolЦя утиліта, що входить до складу Windows SDK, дозволяє підписувати файли та перевіряти існуючі підписи, а також пропонує широкий спектр опцій для різних сценаріїв.

Деякі з найважливіших опцій Функції SignTool такі:

  • /ac: вказує додатковий сертифікат, наприклад, перехресний сертифікат, який пов’язує ваш сертифікат із довіреним кореневим центром авторизації.
  • /f: вказує на файл, що містить сертифікат підпису (зазвичай .pfx).
  • /p: надає пароль, пов’язаний із сертифікатом підпису, що зберігається у файлі .pfx.
  • /фд: визначає алгоритм хешування, який використовується під час створення підпису файлу, наприклад, /fd sha256 для створення підпису на основі SHA256 (якщо нічого не вказано, у старіших версіях зазвичай використовується значення за замовчуванням SHA1).
  • /n «Загальна назва сертифіката»: дозволяє вибрати певний сертифікат зі сховища сертифікатів Windows на основі його загального імені (CN).
  • /t: вказує сервер позначок часу, сумісний зі схемою Microsoft Authenticode.
  • /тр: вказує на сервер позначок часу, сумісний з RFC 3161, сучасніший та рекомендований для нових реалізацій.
  Як покроково активувати та перевірити ліцензію на Windows Server

Під час роботи над проектом драйвера важливо знати, які файли потрібно підписати. Щоб драйвер правильно встановився у Windows 7 або 8, його необхідно підписати. усі відповідні бінарні файли проекту (наприклад, файли .sys), а також файл каталогу (.cat), який групує набір файлів у пакеті.

У вас є два основні варіанти: ви можете скопіювати ці файли до робочого каталогу, де у вас доступний SignTool, або безпосередньо перемістіть їх до папки bin Windows SDK і запустіть інструмент звідти. Важливо, щоб у вас були під рукою як бінарні файли, так і сертифікати, які ви збираєтеся використовувати для підпису.

Типовий сценарій включає отримання відповідного сертифіката для підпису коду, наприклад, Сертифікат «Microsoft Cross Certificate» виданий GlobalSign або іншим довіреним центром. Ви розміщуєте цей перехресний сертифікат (CrossCert.crt) у своєму робочому каталозі разом із вашим основним сертифікатом підпису коду (наприклад, CodeSign.pfx) та виконуєте команду, подібну до цієї:

інструмент підпису /ac CrossCert.crt /f CodeSign.pfx /p password1234 /tr http://timestamp.globalsign.com/tsa/r6advanced1 filter.sys

Ця команда генерує підпис, який включає перехресну сертифікацію та отримує позначку часу від сервера RFC 3161 компанії GlobalSign. Позначка часу є ключовою, оскільки вона доводить, що файл було підписано в дату, коли сертифікат був дійсним, навіть якщо термін його дії пізніше закінчиться.

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

signtool verify -v -kp назва_файлу.sys

Вибір -v Це примусово видає детальний вивід, що показує детальну інформацію про ланцюжок сертифікатів та опцію -кп Він перевіряє підпис відповідно до критеріїв підписання коду, специфічних для драйвера режиму ядра. Якщо все пройде добре, ви побачите результат, який свідчить про правильність підпису та ланцюжка сертифікатів.

Нарешті, рекомендується Повторіть той самий процес підписання та перевірки з файлом .cat пакета. Після належного підписання бінарних файлів і каталогу драйвер можна встановити на Windows 7 та 8 x64 без проблем із безпекою, а під час роботи майстра встановлення мають з’явитися вікна інформації про надійного видавця та стандартні системні вікна.

Щоб глибше зануритися в усі варіанти інструменту, Microsoft підтримує вичерпний довідник команд SignTool, а також Спеціальний посібник з підписання коду в режимі ядра та документацію, присвячену цифровим підписам модулів ядра у Windows. Ці ресурси пояснюють особливі випадки, розширені параметри та особливості кожної версії системи.