Драйвер с кодовой подписью в Windows 7 не работает с 0xC0000428 - PullRequest
0 голосов
/ 17 мая 2018

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

Windows 7 Code Signed Driver Failure Screenshot

Я завладел проектом драйвера, созданным с использованием 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

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

Failing Driver Code Signing Certificate

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

Driver Properties Screenshot

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

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

Sign Code SignTool.exe Командная строка

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

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

Working Driver View Certificate Details Screenshot

Вот свойства драйвера Digital Signature для товара / работыводитель.

Working Driver Digital Signature

Вы можете отличить их, поскольку я переименовал хороший / рабочий 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%

1 Ответ

0 голосов
/ 05 июня 2018

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

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

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

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

Примечание: статья в следующей ссылке была неправильной.Отпечаток пальца не должен совпадать.Эмитент, однако, должен точно соответствовать.

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

Драйверы Windows для подписи

Требуется эмитент

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

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

Отпечаток моего сертификата, который не имеет значения:

0563 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

Я использовал ссылку download для получения файла.Это дало мне файл «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 с исправлением.

...