Драйвер с подписью кода в Windows 7 не работает с кодом 0xC0000428

Мой подписанный драйвер дает Windows (Windows 7 с оперативным исправлением SHA256), которая не запускается и выдает код ошибки 0xC0000428 (Windows не может проверить цифровую подпись для этого файла).

Драйвер с подписью кода в Windows 7 не работает с кодом 0xC0000428

Я взял на себя проект драйвера, созданный с помощью Visual Studio 2010, и моей первой задачей было обновить сертификат подписи кода с истекшим сроком действия. Первоначально цифровой сертификат был с Global Sign, а теперь используется Digi Cert. Первоначальный программист написал мне в электронном письме, что у него ежегодно возникают проблемы с этой темой.

Я проверил рабочий, но просроченный файл драйвера icsflt.sys и увидел, что это SHA256 с отпечатком SHA1. Все остальное работает. Я пробовал много разных вариантов (сертификат с двойной подписью, SHA1 и SHA2). Моя последняя попытка, прямо из службы технической поддержки Digi Cert, использует следующую командную строку.

C:\ICS\IM6000\Certificate>"C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe" sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /a "C:\ICS\IM6000\filter\objfre_win7_AMD64\amd64\icsflt.sys"
Done Adding Additional Store
Successfully signed: C:\ICS\IM6000\filter\objfre_win7_AMD64\amd64\icsflt.sys

Вот сертификат, похожий на оригинал.

Драйвер с подписью кода в Windows 7 не работает с кодом 0xC0000428

Вот базовый сертификат, ясно показывающий SHA256 для алгоритма дайджеста. Сертификаты взяты с машины сборки. Первый снимок экрана «Диспетчера загрузки Windows» сделан на тестовой машине.

Драйвер с подписью кода в Windows 7 не работает с кодом 0xC0000428

Вот некоторые ссылки, которые я использовал с веб-сайта Digi Certs.

Двойная подпись SHA256 и SHA1

Код подписи SignTool.exe Командная строка

Установка сертификата подписи кода

Вот рабочий вид сертификата с истекшим сроком действия.

Драйвер с подписью кода в Windows 7 не работает с кодом 0xC0000428

Вот свойства драйвера Цифровая подпись для хорошего / рабочего драйвера.

Драйвер с подписью кода в Windows 7 не работает с кодом 0xC0000428

Их можно отличить друг от друга, так как я переименовал хороший / рабочий в icflt-good.sys. Если не считать названия компании, дат и центра сертификации (CA), они выглядят одинаково, но Windows 7 напоминает новый от Digi Cert.

Вот код предыдущей командной строки signtool.exe, которую я закомментировал.

@echo on

@REM see "How to Release-Sign a Driver Package" and "Release-Signing a Driver through an Embedded Signature in Windows DDK"
@REM despite the store's name seems to be Personal we should use MY when using Signtool. Otherwise the certificate is not found.
@REM when Personal store is created with makecert, another Personal is created. Weird.
@REM Signtool sign /v /ac MSCV-GlobalSign.cer /s MY /sha1 5250f1a5ddd11e3e4e924757e6da1c43dd3487c0 /t http://timestamp.globalsign.com/scripts/timstamp.dll %mydriverpath%
@REM Signtool sign /v /ac MSCV-GlobalSign.cer /s MY /sha1 5D743B02DCDE74B16D133BDFEB2E1C5F6F44E966 /t http://timestamp.globalsign.com/scripts/timstamp.dll %mydriverpath%

@REM check $\IM6000\Certificate\current for the exact file names and password
@REM Signtool sign /v /ac %PROJECT_DIR%\..\Certificate\current\MSCV-GlobalSign.cer /f %PROJECT_DIR%\..\Certificate\current\OS201602156091.pfx /p 1C73295775925A7EE1C6D35ADF9DF611A55A60B8 /t http://timestamp.globalsign.com/scripts/timstamp.dll %mydriverpath%
@REM Signtool sign /v /ac %PROJECT_DIR%\..\Certificate\current\GlobalSignRootCA.crt /f %PROJECT_DIR%\..\Certificate\current\OS201701106786.pfx /p ICScertificate2017 /t http://timestamp.globalsign.com/scripts/timstamp.dll %mydriverpath%
@REM Signtool sign /v /fd sha256 /ac %PROJECT_DIR%\..\Certificate\current\GlobalSignRootCA.crt /f %PROJECT_DIR%\..\Certificate\current\OS201701106786.pfx /p ICScertificate2017 /tr http://timestamp.globalsign.com/scripts/timstamp.dll?td=sha256 /td sha256 %mydriverpath%
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
925
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После долгих исследований я понял проблему. (Пожалуйста, отметьте вопрос и особенно ответьте на него.)

Для подписи драйверов уровня ядра требуется перекрестная подпись с использованием переключателя /AC «Дополнительный сертификат», который создает цепочку перекрестных сертификатов для корневого сертификата Microsoft.

Соответствующие ссылки:

Ссылки на перекрестный сертификат Microsoft

Примечание: статья по следующей ссылке неверна. Отпечаток большого пальца НЕ ОБЯЗАТЕЛЬНО совпадать. Эмитент, однако, должен точно соответствовать.

Драйверы режима ядра с перекрестной подписью

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

Получить Эмитента требуется

Я зашел в mmc и добавил сертификаты (личные). Затем я дважды щелкнул свой сертификат SHA256 и отметил эмитента, который в моем случае был:

CN = DigiCert Assured ID Root CA
OU = www.digicert.com
O = DigiCert Inc
C = US

Взаимодействие с другими людьми Отпечаток моего сертификата, который не имеет значения, следующий:

05 63 b8 63 0d 62 d7 5a bb c8 ab 1e 4b df b5 a8 99 b2 4d 43

Список перекрестных сертификатов Microsoft снова - здесь. Моя загрузка была DigiCert Assured ID Root CA, на которой есть отпечаток:

ba 3e a5 4d 72 c1 45 d3 7c 25 5e 1e a4 0a fb c6 33 48 b9 6e

Я использовал ссылку скачать, чтобы получить файл. Это дало мне файл «DigiCert Assured ID Root CA.crt».

Примечание: мне сказали, что сертификат должен быть расширением CER. Мое тестирование и беседа с DigiCert показали, что это неправда. ЭЛТ в порядке.

Командная строка инструмента рабочего знака:

C:\ICS\IM6000\Certificate>"C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe" sign /v /ac "DigiCert Assured ID Root CA.crt" /tr http://timestamp.digicert.com /td sha256 /fd sha256 /a "C:\ICS\IM6000\filter\objfre_win7_AMD64\amd64\icsflt.sys"

Чтобы убедиться, что знак является правильным крестиком, настоятельно рекомендую ввести следующую строку:

"C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe" verify /kp /v "C:\ICS\IM6000\filter\objfre_win7_AMD64\amd64\icsflt.sys"

Обратите внимание на этот результат проверки:

Verifying: C:\ICS\IM6000\filter\objfre_win7_AMD64\amd64\icsflt.sys
Signature Index: 0 (Primary Signature)
Hash of file (sha256): FAFB2B31B8ED4A9E8F9EC84196E7E52009A4C709521457FD83FC1945DCF5872F

Signing Certificate Chain:
    Issued to: DigiCert Assured ID Root CA
    Issued by: DigiCert Assured ID Root CA
    Expires:   Sun Nov 09 17:00:00 2031
    SHA1 hash: 0563B8630D62D75ABBC8AB1E4BDFB5A899B24D43

        Issued to: DigiCert SHA2 Assured ID Code Signing CA
        Issued by: DigiCert Assured ID Root CA
        Expires:   Sun Oct 22 05:00:00 2028
        SHA1 hash: 92C1588E85AF2201CE7915E8538B492F605B80C6

            Issued to: JMR Electronics, Inc.
            Issued by: DigiCert SHA2 Assured ID Code Signing CA
            Expires:   Mon Jan 28 05:00:00 2019
            SHA1 hash: 9CDC225480659E8CDD6E794A81455C905403755B

The signature is timestamped: Mon Jun 04 16:35:45 2018
Timestamp Verified by:
    Issued to: DigiCert Assured ID Root CA
    Issued by: DigiCert Assured ID Root CA
    Expires:   Sun Nov 09 17:00:00 2031
    SHA1 hash: 0563B8630D62D75ABBC8AB1E4BDFB5A899B24D43

        Issued to: DigiCert SHA2 Assured ID Timestamping CA
        Issued by: DigiCert Assured ID Root CA
        Expires:   Tue Jan 07 05:00:00 2031
        SHA1 hash: 3BA63A6E4841355772DEBEF9CDCF4D5AF353A297

            Issued to: DigiCert SHA2 Timestamp Responder
            Issued by: DigiCert SHA2 Assured ID Timestamping CA
            Expires:   Mon Jan 17 17:00:00 2028
            SHA1 hash: 400191475C98891DEBA104AF47091B5EB6D4CBCB

Cross Certificate Chain:
    Issued to: Microsoft Code Verification Root
    Issued by: Microsoft Code Verification Root
    Expires:   Sat Nov 01 06:54:03 2025
    SHA1 hash: 8FBE4D070EF8AB1BCCAF2A9D5CCAE7282A2C66B3

        Issued to: DigiCert Assured ID Root CA
        Issued by: Microsoft Code Verification Root
        Expires:   Thu Apr 15 12:51:37 2021
        SHA1 hash: BA3EA54D72C145D37C255E1EA40AFBC63348B96E

            Issued to: DigiCert SHA2 Assured ID Code Signing CA
            Issued by: DigiCert Assured ID Root CA
            Expires:   Sun Oct 22 05:00:00 2028
            SHA1 hash: 92C1588E85AF2201CE7915E8538B492F605B80C6

                Issued to: JMR Electronics, Inc.
                Issued by: DigiCert SHA2 Assured ID Code Signing CA
                Expires:   Mon Jan 28 05:00:00 2019
                SHA1 hash: 9CDC225480659E8CDD6E794A81455C905403755B


Successfully verified: C:\ICS\IM6000\filter\objfre_win7_AMD64\amd64\icsflt.sys

Number of files successfully Verified: 1
Number of warnings: 0
Number of errors: 0

Ключ здесь, помимо Successfully verified, цепочка перекрестных сертификатов начинается с Issued to: Microsoft Code Verification Root и заканчивается моим сертификатом подписи цифрового кода и всем, что между ними. Это то, чего Microsoft хочет от Windows. Windows 7 или Windows 10 значения не имеют.

Мне также приходилось использовать signtool.exe как минимум из Windows 8.1. Более ранние версии не поддерживали все необходимые переключатели, которые мне сказали использовать.

Хотя в конце концов мне не понадобился сертификат SHA1, выяснение того, как его получить, заняло несколько циклов. Мне несколько раз говорили, что мне это нужно, но я этого не делал. Всем, кому интересно, инструкция по получению - это здесь. В настоящее время все является SHA256 даже в Windows 7 с исправлением.

Другие вопросы по теме