Visual Studio - Kode underskrevet Driver på Windows 7 mislykkes med 0xC0000428

Indlæg af Hanne Mølgaard Plasc

Problem



Min underskrevne driver giver en Windows (Windows 7 med SHA256 hotfix), der ikke starter og giver fejlkode 0xC0000428 (Windows kan ikke bekræfte den digitale signatur for denne fil).


Windows 7 kode underskrevet driverfejl skærmbillede [16]


Jeg overtog et driverprojekt, der blev oprettet ved hjælp af Visual Studio 2010, og min første opgave var at opdatere det underskrevne kodesignaturcertifikat. Oprindeligt var det digitale certifikat med Global Sign og bruger nu Digi Cert. Den oprindelige programmør udtalte på en mail til mig, at han har problemer med dette emne hvert år.


Jeg undersøgte arbejdet, men udløb icsflt.sys driverfilen og se, at det er SHA256 med tavleprintet SHA1. Alt andet fungerer. Jeg forsøgte mange forskellige variationer (dobbelt signeret certifikat, SHA1 og SHA2). Mit sidste forsøg, lige fra Digi Cert teknisk support, bruger følgende kommandolinje.


C:ICSIM6000Certificate>"C:Program Files (x86)Windows Kits8.1inx64signtool.exe" sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /a "C:ICSIM6000filterobjfre\_win7\_AMD64amd64icsflt.sys"
Done Adding Additional Store
Successfully signed: C:ICSIM6000filterobjfre\_win7\_AMD64amd64icsflt.sys


Her er certifikatet, som ligner den oprindelige.


Manglende driverkodesigneringscertifikat [17]


Her er basiscertifikatet tydeligvis SHA256 til fordøjelsesalgoritmen. Certifikaterne er fra byggemaskinen. Det første skærmbillede af 'Windows Boot Manager' er fra testmaskinen.


Driver Egenskaber Skærmbillede [18]


Her er nogle af de links, jeg brugte fra Digi Certs hjemmeside.


Dual Signing SHA256 og SHA1 [19]


Sign Code SignTool.exe Kommandolinje [20]


Installer kode underskrift certifikat [21]


Her er den udløbne certifikatvisning.


Arbejdstager Se certifikatdetaljer Skærmbillede [22]


Her er driveregenskaberne Digital Signature for den gode/arbejdende driver.


Arbejdstager Digital Signatur [23]


Du kan fortælle dem fra hinanden, da jeg omdøbt den gode/arbejdende en icflt-good.sys. Bortset fra firmaets navn, datoer og certifikatmyndighed (CA) ser de to identiske ud, men Windows 7 barks på den nye fra Digi Cert.


Her er koden til de forrige signtool.exe kommandolinjer, som jeg kommenterede.


@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 $IM6000Certificatecurrent for the exact file names and password
@REM Signtool sign /v /ac \%PROJECT\_DIR\%..CertificatecurrentMSCV-GlobalSign.cer /f \%PROJECT\_DIR\%..CertificatecurrentOS201602156091.pfx /p 1C73295775925A7EE1C6D35ADF9DF611A55A60B8 /t http://timestamp.globalsign.com/scripts/timstamp.dll \%mydriverpath\%
@REM Signtool sign /v /ac \%PROJECT\_DIR\%..CertificatecurrentGlobalSignRootCA.crt /f \%PROJECT\_DIR\%..CertificatecurrentOS201701106786.pfx /p ICScertificate2017 /t http://timestamp.globalsign.com/scripts/timstamp.dll \%mydriverpath\%
@REM Signtool sign /v /fd sha256 /ac \%PROJECT\_DIR\%..CertificatecurrentGlobalSignRootCA.crt /f \%PROJECT\_DIR\%..CertificatecurrentOS201701106786.pfx /p ICScertificate2017 /tr http://timestamp.globalsign.com/scripts/timstamp.dll?td=sha256 /td sha256 \%mydriverpath\%

Bedste reference


Efter meget forskning fandt jeg ud af problemet.
(Giv venligst en tommelfinger op til spørgsmålet og især svar.)


Undertegnelse af kernelniveaudrivere kræver en kryds-underskrift ved hjælp af /AC -knappen, Yderligere certifikat, opretter en krydscertifikatkæde til et Microsoft Root Certificate.


Relevante links:


Microsoft Cross Certificate Links [24]


Bemærk: Artiklen i det følgende link var forkert. Tommelfingerbilledet behøver ikke at matche. Udstederen er imidlertid nødt til at matche nøjagtigt.


Krydsignal Kernel Mode Drivers [25]


Undertegnelse af Windows-drivere [26]


Hent udsteder nødvendigt


Jeg gik til mmc og tilføjede Certifikater (Personlig). Jeg dobbeltklikede derefter på mit SHA256 certifikat og noterede udstederen, som i mit tilfælde var:


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



Tværspidset på mit certifikat, som ikke betyder noget, er:


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


Microsoft Cross Certificate List igen er her. Min download var DigiCert Assured ID Root CA, som har et fingeraftryk af: [27]


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


Jeg brugte downloadlinket til at hente filen. Det gav mig en fil med 'DigiCert Assured ID Root CA.crt'. [28]


Bemærk: Jeg fik at vide, at certifikatet skulle være en CER-udvidelse. Min test og en samtale med DigiCert viste, at det ikke var sandt. CRT er helt fint.


Arbejdsskiltværktøjskommandolinjen er:


C:ICSIM6000Certificate>"C:Program Files (x86)Windows Kits8.1inx64signtool.exe" sign /v /ac "DigiCert Assured ID Root CA.crt" /tr http://timestamp.digicert.com /td sha256 /fd sha256 /a "C:ICSIM6000filterobjfre\_win7\_AMD64amd64icsflt.sys"


For at kontrollere tegnet er korrekt krydsskilt, anbefaler jeg stærkt at udstede følgende linje:


"C:Program Files (x86)Windows Kits8.1inx64signtool.exe" verify /kp /v "C:ICSIM6000filterobjfre\_win7\_AMD64amd64icsflt.sys"


Bemærk denne udgang fra verifikationstesten:


Verifying: C:ICSIM6000filterobjfre\_win7\_AMD64amd64icsflt.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:ICSIM6000filterobjfre\_win7\_AMD64amd64icsflt.sys

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


Nøglen her er bortset fra Successfully verified korscertifikatkæden starter med Issued to: Microsoft Code Verification Root og slutter med mit digitale kode underskrivelsescertifikat og alt derimellem. Det er hvad Microsoft vil have med Windows. Windows 7 eller Windows 10 er ligegyldigt.


Jeg skulle også bruge signtool.exe fra mindst Windows 8.1. Tidligere versioner understøtter ikke alle de nødvendige switches, som jeg fik at vide at bruge.


Selvom jeg ikke havde brug for SHA1-certifikatet i sidste ende, fandt jeg ud af, hvordan man skulle få en, nogle cykler. Jeg blev fortalt flere gange, at jeg havde brug for det, som jeg ikke gjorde. Til enhver, der er interesseret, er instruktionen til at opnå det her. Alt er SHA256 i dag selv i Windows 7 med hotfixet. [29]