Podpisany sterownik INF działa na komputerze, na którym został podpisany, a nie na innych

Moja firma kupiłaCertyfikat podpisu kierowcy z Go Daddy. Użyłem go do podpisania prostego pliku INF, który jest sterownikiem dla niektórych naszych urządzeń USB korzystających z usbser.sys firmy Microsoft. Wszystko wydaje się działać na 64-bitowym komputerze z systemem Windows 7, na którym go podpisałem: jeśli kliknę prawym przyciskiem myszy plik INF i wybiorę opcję „Instaluj”, to drugie ostrzeżenie, które widzę, to dobre ostrzeżenie, które pokazuje poprawną nazwę wydawcy:

Jeśli jednak przejdę na inny komputer (64-bitowy system Windows Vista), kliknij prawym przyciskiem myszy plik INF i wybierz opcję „Zainstaluj”, a zamiast tego otrzymuję ten komunikat o błędzie:

To sprawia, że ​​myślę, że moje sterowniki nie są poprawnie podpisane, a jedynym powodem, dla którego wygląda dobrze na moim komputerze, jest jakiś certyfikat root / intermediate / cross zainstalowany podczas procesu instalacji Go Daddy. Zdecydowanie chcę, aby moi użytkownicy widzieli, że jesteśmy zweryfikowanym wydawcą bez konieczności ręcznego instalowania certyfikatu na ich komputerze.

Plik INF i plik .cat w tym samym katalogu.

Czy ktoś wie, dlaczego tak się dzieje i jak mogę to naprawić?

Podejrzewam, że głównym problemem jest to, że otrzymuję ten błąd podczas uruchamianiasigntool verify /v pololu.cat (więcej szczegółów poniżej), a ja nie zorientowałem się, dlaczego:

Błąd SignTool: łańcuch certyfikatów przetworzony, ale zakończony certyfikatem głównym, który nie jest zaufany przez dostawcę zaufania.

Szczegóły mojej procedury

TheCertyfikat podpisu kierowcy to nowy produkt Go Daddy, który wprowadzili kilka tygodni temu. Nie jestem całkowicie pewien, jak różni się odCertyfikat podpisania kodu, ale to ta sama cena. Poszedłem zainstrukcje na stronie Go Daddy, aby pobrać i zainstalować certyfikat, chociaż instrukcje nie pasują idealnie do rzeczywistości. Po zainstalowaniu Microsoft Cross Certificate w kroku 1 zobaczyłem czerwony komunikat ostrzegawczy, który powiedział:

Przed zainstalowaniem certyfikatu należy użyć usługi Windows Update, aby zaktualizować certyfikaty główne lub ręcznie pobrać i zainstalować certyfikat główny z naszego repozytorium.

Nie wiem, co z tym zrobić. Zainstalowałem kilka certyfikatów głównych GoDaddy z ich repozytorium, ale nie spowodowało to zauważalnej różnicy.

Zainstalowałem najnowszą wersję (8.0)Windows Driver Kit (WDK) a następnie zainstalował najnowszą wersję (8.0)Windows Software Development Kit (SDK) dla Windows 8. To daje mi dostęp doinf2cat isigntool narzędzia. Oba zestawy zostały wydane w ciągu ostatniego miesiąca, więc możliwe jest, że pojawią się nowe błędy.

W nowym katalogu umieściłem trzy pliki:

pololu_usb_to_serial.inf, plik INF, który chcę podpisać. Jest długi, ale prosty;możesz go przeczytać tutaj. Ten plik INF jest samodzielnym sterownikiem; żadne inne pliki nie są potrzebne w naszym pakiecie sterowników. Ten plik jest w zasadzie taki sam jak wersja, którą nasza firma z powodzeniem rozprowadzała (niepodpisana) od lat, ale musiałem wprowadzić kilka zmian, aby Inf2Cat ją zaakceptował.mscvr-cross-gdroot-g2.crt, które pobrałem zRepozytorium certyfikatów Go Daddy. Uważam, że jest to certyfikat krzyżowy, który dowodzi, że „Główny ośrodek certyfikacji Go Daddy - G2” jest zaufany przez Microsoft, ale nie jestem całkowicie pewien, czy jest to właściwy certyfikat do użycia.sign_it.bat, plik wsadowy, który uruchamiam w celu podpisania.

Plik wsadowy zawiera tylko:

"C:\Program Files (x86)\Windows Kits\8.0\bin\x86\inf2cat" /v /driver:%~dp0 /os:XP_X86,Vista_X86,Vista_X64,7_X86,7_X64,8_X86,8_X64

"C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool" sign /v /ac "mscvr-cross-gdroot-g2.crt" /n "Pololu Corporation" /t http://tsa.starfieldtech.com pololu.cat

Pierwsze polecenie wywołujeinf2cat z zestawu Windows Driver Kit. The/v opcja sprawia, że ​​jest gadatliwa. The/driver:%~dp0 opcja wskazuje na katalog zawierający plik wsadowy; za. nie działa z jakiegoś powodu i jest to przyjemniejsze niż konieczność kodowania pełnej ścieżki. The/os opcja określa wszystkie systemy operacyjne, które chciałbym obsługiwać za pomocą tego pakietu sterowników. To polecenie tworzypololu.cat.

Drugie polecenie wywołujesigntool z Windows Software Development Kit do podpisania pliku katalogu. The/v opcja sprawia, że ​​jest gadatliwa. The/ac opcja określa, które użycie certyfikatu krzyżowego (patrz # 2 powyżej). The/n opcja określa nazwę używanego certyfikatu (ten certyfikat jest instalowany na moim komputerze zgodnie zcertmgr.msc). The/t opcja określa adres URL serwera datowania Go Daddy.

Oto dane wyjściowe w wierszu polecenia podczas uruchamiania pliku wsadowego:

C:\Users\david.POLOLU\Desktop\sign_it>"C:\Program Files (x86)\Windows Kits\8.0\b
in\x86\inf2cat" /v /driver:C:\Users\david.POLOLU\Desktop\sign_it\ /os:XP_X86,Vis
ta_X86,Vista_X64,7_X86,7_X64,8_X86,8_X64
Processing directory (C:\Users\david.POLOLU\Desktop\sign_it\) file (mscvr-cross-
gdroot-g2.crt)
Processing directory (C:\Users\david.POLOLU\Desktop\sign_it\) file (pololu_usb_t
o_serial.inf)
Processing directory (C:\Users\david.POLOLU\Desktop\sign_it\) file (sign_it.bat)

Parsing INF: C:\Users\david.POLOLU\Desktop\sign_it\pololu_usb_to_serial.inf
Finished parsing INFs
Processing INF: C:\Users\david.POLOLU\Desktop\sign_it\pololu_usb_to_serial.inf
Finished processing INFs
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...

Signability test complete.

Errors:
None

Warnings:
None

Catalog generation complete.
C:\Users\david.POLOLU\Desktop\sign_it\pololu.cat

C:\Users\david.POLOLU\Desktop\sign_it>"C:\Program Files (x86)\Windows Kits\8.0\b
in\x86\signtool" sign /v /ac "mscvr-cross-gdroot-g2.crt" /n "Pololu Corporation"
 /t http://tsa.starfieldtech.com pololu.cat
The following certificate was selected:
    Issued to: Pololu Corporation
    Issued by: Go Daddy Secure Certificate Authority - G2
    Expires:   Sat Aug 31 11:35:25 2013
    SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0

Cross certificate chain (using machine store):
    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: Go Daddy Root Certificate Authority - G2
        Issued by: Microsoft Code Verification Root
        Expires:   Thu Apr 15 13:07:40 2021
        SHA1 hash: 842C5CB34B73BBC5ED8564BDEDA786967D7B42EF

            Issued to: Go Daddy Secure Certificate Authority - G2
            Issued by: Go Daddy Root Certificate Authority - G2
            Expires:   Sat May 03 00:00:00 2031
            SHA1 hash: 27AC9369FAF25207BB2627CEFACCBE4EF9C319B8

                Issued to: Pololu Corporation
                Issued by: Go Daddy Secure Certificate Authority - G2
                Expires:   Sat Aug 31 11:35:25 2013
                SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0

Done Adding Additional Store
Successfully signed: pololu.cat

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

Jak już powiedziałem, trzymam plik .cat i .inf w tym samym katalogu, ale działają one poprawnie tylko na komputerze, na którym je podpisałem.

Weryfikacja z Signtool

Thesigntool narzędzie firmy Microsoft ma także funkcję „weryfikuj”, która pozwala sprawdzić, czy podpis jest poprawny. Istnieją trzy różne zasady, których można użyć podczas weryfikacji, a każda z nich daje inne wyniki:

TheZasady weryfikacji sterownika systemu Windows mówi, że mój łańcuch podpisów nie zwraca się do firmy Microsoft i drukuje komunikat o błędzie o tym, jak mój root nie jest zaufany. To dla mnie problem.TheDomyślne zasady weryfikacji autentyczności (/pa) mówi również, że mój łańcuch podpisów nie powraca do Microsoftu, ale nie powoduje błędu.Thezasady podpisywania sterownika trybu jądra (/kp, co prawdopodobnie nie ma zastosowania, ponieważ nie podpisuję sterowników trybu jądra), mówi, że mój łańcuch podpisów wraca do Microsoft i nie daje żadnego błędu.

Czy ktoś wie, która polityka jest używana przez Windows dla plików INF? To przynajmniej pomoże mi zawęzić problem.

Oto pełne, pełne dane wyjściowe zsigntool verify:

C:\Users\david.POLOLU\Desktop\sign_it>"C:\Program Files (x86)\Windows Kits\8.0\b
in\x86\signtool" verify /v pololu.cat

Verifying: pololu.cat
Signature Index: 0 (Primary Signature)
Hash of file (sha1): 09A611ECC83E61646DB967D4C23EED725B903C1B

Signing Certificate Chain:
    Issued to: Go Daddy Root Certificate Authority - G2
    Issued by: Go Daddy Root Certificate Authority - G2
    Expires:   Thu Dec 31 16:59:59 2037
    SHA1 hash: 47BEABC922EAE80E78783462A79F45C254FDE68B

        Issued to: Go Daddy Secure Certificate Authority - G2
        Issued by: Go Daddy Root Certificate Authority - G2
        Expires:   Sat May 03 00:00:00 2031
        SHA1 hash: 27AC9369FAF25207BB2627CEFACCBE4EF9C319B8

            Issued to: Pololu Corporation
            Issued by: Go Daddy Secure Certificate Authority - G2
            Expires:   Sat Aug 31 11:35:25 2013
            SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0

The signature is timestamped: Wed Sep 05 16:22:34 2012
Timestamp Verified by:
    Issued to: Starfield Services Root Certificate Authority
    Issued by: Starfield Services Root Certificate Authority
    Expires:   Mon Dec 31 16:59:59 2029
    SHA1 hash: 5D003860F002ED829DEAA41868F788186D62127F

        Issued to: Starfield Services Timestamp Authority
        Issued by: Starfield Services Root Certificate Authority
        Expires:   Wed Apr 26 00:00:00 2017
        SHA1 hash: AEAC793CDD107ACFB314A2FE384A8F16840B7C26

SignTool Error: A certificate chain processed, but terminated in a root
        certificate which is not trusted by the trust provider.

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

C:\Users\david.POLOLU\Desktop\sign_it>"C:\Program Files (x86)\Windows Kits\8.0\b
in\x86\signtool" verify /v /pa pololu.cat

Verifying: pololu.cat
Signature Index: 0 (Primary Signature)
Hash of file (sha1): 09A611ECC83E61646DB967D4C23EED725B903C1B

Signing Certificate Chain:
    Issued to: Go Daddy Root Certificate Authority - G2
    Issued by: Go Daddy Root Certificate Authority - G2
    Expires:   Thu Dec 31 16:59:59 2037
    SHA1 hash: 47BEABC922EAE80E78783462A79F45C254FDE68B

        Issued to: Go Daddy Secure Certificate Authority - G2
        Issued by: Go Daddy Root Certificate Authority - G2
        Expires:   Sat May 03 00:00:00 2031
        SHA1 hash: 27AC9369FAF25207BB2627CEFACCBE4EF9C319B8

            Issued to: Pololu Corporation
            Issued by: Go Daddy Secure Certificate Authority - G2
            Expires:   Sat Aug 31 11:35:25 2013
            SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0

The signature is timestamped: Wed Sep 05 16:22:34 2012
Timestamp Verified by:
    Issued to: Starfield Services Root Certificate Authority
    Issued by: Starfield Services Root Certificate Authority
    Expires:   Mon Dec 31 16:59:59 2029
    SHA1 hash: 5D003860F002ED829DEAA41868F788186D62127F

        Issued to: Starfield Services Timestamp Authority
        Issued by: Starfield Services Root Certificate Authority
        Expires:   Wed Apr 26 00:00:00 2017
        SHA1 hash: AEAC793CDD107ACFB314A2FE384A8F16840B7C26


Successfully verified: pololu.cat

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

C:\Users\david.POLOLU\Desktop\sign_it>"C:\Program Files (x86)\Windows Kits\8.0\b
in\x86\signtool" verify /v /kp pololu.cat

Verifying: pololu.cat
Signature Index: 0 (Primary Signature)
Hash of file (sha1): 09A611ECC83E61646DB967D4C23EED725B903C1B

Signing Certificate Chain:
    Issued to: Go Daddy Root Certificate Authority - G2
    Issued by: Go Daddy Root Certificate Authority - G2
    Expires:   Thu Dec 31 16:59:59 2037
    SHA1 hash: 47BEABC922EAE80E78783462A79F45C254FDE68B

        Issued to: Go Daddy Secure Certificate Authority - G2
        Issued by: Go Daddy Root Certificate Authority - G2
        Expires:   Sat May 03 00:00:00 2031
        SHA1 hash: 27AC9369FAF25207BB2627CEFACCBE4EF9C319B8

            Issued to: Pololu Corporation
            Issued by: Go Daddy Secure Certificate Authority - G2
            Expires:   Sat Aug 31 11:35:25 2013
            SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0

The signature is timestamped: Wed Sep 05 16:22:34 2012
Timestamp Verified by:
    Issued to: Starfield Services Root Certificate Authority
    Issued by: Starfield Services Root Certificate Authority
    Expires:   Mon Dec 31 16:59:59 2029
    SHA1 hash: 5D003860F002ED829DEAA41868F788186D62127F

        Issued to: Starfield Services Timestamp Authority
        Issued by: Starfield Services Root Certificate Authority
        Expires:   Wed Apr 26 00:00:00 2017
        SHA1 hash: AEAC793CDD107ACFB314A2FE384A8F16840B7C26

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: Go Daddy Root Certificate Authority - G2
        Issued by: Microsoft Code Verification Root
        Expires:   Thu Apr 15 13:07:40 2021
        SHA1 hash: 842C5CB34B73BBC5ED8564BDEDA786967D7B42EF

            Issued to: Go Daddy Secure Certificate Authority - G2
            Issued by: Go Daddy Root Certificate Authority - G2
            Expires:   Sat May 03 00:00:00 2031
            SHA1 hash: 27AC9369FAF25207BB2627CEFACCBE4EF9C319B8

                Issued to: Pololu Corporation
                Issued by: Go Daddy Secure Certificate Authority - G2
                Expires:   Sat Aug 31 11:35:25 2013
                SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0


Successfully verified: pololu.cat

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

Wyjście wyglądało tak samo po uruchomieniu na komputerze, na którym podpisałem sterownik (gdzie działa) i na innym komputerze (gdzie nie działa).

Podobne pytania dotyczące StackOverflow

Podpisywanie sterowników Thawte dla 64-bitowego systemu Windows - Rozwiązaniem problemu tego faceta było dodanie dyrektywy CatalogFile do pliku INF, ale już to mam. (CatalogFile=pololu.cat).

Edytuj # 1: Podpisywanie plików wykonywalnych działa

Użyłem signtool z tymi samymi opcjami do podpisania pliku wykonywalnego (instalator NSIS) i działał on poprawnie przy pierwszej próbie na obu komputerach. Sądzę więc, że jest coś innego w polityce podpisywania plików sterownika INF i to właśnie mnie uprzykrza.

Edytuj # 2: Ostrzeżenie o certyfikacie GoDaddy

Jeśli kliknę dwukrotniemscvr-cross-gdroot-g2.crt, na karcie Ogólne jest napisane „System Windows nie ma wystarczających informacji, aby zweryfikować ten certyfikat”. W zakładce Ścieżka certyfikacji w obszarze „Status certyfikatu:” wyświetlany jest komunikat „Nie można znaleźć wystawcy tego certyfikatu.”. Widzę te same ostrzeżenia, jeśli kliknę dwukrotniegd_ms_drv_sign_bundle.p7b (pakiet certyfikatów od GoDaddy) i otwórz pierwszy certyfikat.

Wydawcą obu tych certyfikatów ma być główny kod weryfikacyjny Microsoft. Czy powinienem się martwić tym komunikatem ostrzegawczym?

Edytuj # 3: Usuwanie certyfikatów GoDaddy

Lindsay z zespołu pomocy technicznej GoDaddy wrócił do mnie. Ona się łączyłata strona z globalsign wyjaśnia, w jaki sposób należy odinstalować certyfikaty główne i pośrednie z urzędu certyfikacji na komputerze, na którym podpisujesz sterowniki. Lindsay mówi, że jeśli nie zrobisz tego kroku, narzędzia do podpisywania zakładają, że te certyfikaty są obecne na innych komputerach, a zatem nie są uwzględniane w podpisie.

Czy ktoś wie, jak sprawdzić, które certyfikaty są „importowane” do podpisu? Jakich narzędzi mogę użyć, aby sprawdzić, czy Lindsay i GlobalSign mają rację?

Przy okazji mamy komputery z systemem Windows XP, ale Microsoft wkrótce przestanie wspierać ten system. Pomimo tego, co mówi GlobalSign, jestdostał być sposobem na to, aby to działało w systemie Windows 7.

Na podstawie rad Lindsay zastosowałem się do instrukcji firmy MicrosoftWyłącz automatyczną aktualizację certyfikatów głównych, a następnie użyłem interfejsu użytkownikacertmgr.msc usunąć wszystkie certyfikaty GoDaddy z „Zaufanych głównych urzędów certyfikacji” i „Pośrednich urzędów certyfikacji”. Następnie ponownie podpisałem plik inf.

Niestety to nie zadziałało! Po podpisaniu dwukrotnie sprawdziłem, czy wszystkie certyfikaty GoDaddy są nadal usuwane.

Nie otrzymałem informacji zwrotnej od GoDaddy na wyjściusigntool verifylub jakiekolwiek dane wejściowe dotyczące zasad podpisywania sterowników, które powinienem sprawdzić podczas weryfikacji. Miałem nadzieję, że po prostu przyjrzą się wynikom weryfikacji i powiedzą mi, co robię źle, lub powiedz mi, jak będzie wyglądało prawidłowe wyjście.

Dla kompletności, oto trzy wyjściasigntool verify po usunięciu tych certyfikatów i ponownym podpisaniu sterowników:

C:\Users\david.POLOLU\Desktop\sign_inf>"C:\Program Files (x86)\Windows Kits\8.0\
bin\x86\signtool.exe" verify /v pololu.cat

Verifying: pololu.cat
Signature Index: 0 (Primary Signature)
Hash of file (sha1): 5AE4F370471009C8B0ED936C9AE19ED14ABD67D7

Signing Certificate Chain:
    Issued to: Go Daddy Root Certificate Authority - G2
    Issued by: Microsoft Code Verification Root
    Expires:   Thu Apr 15 13:07:40 2021
    SHA1 hash: 842C5CB34B73BBC5ED8564BDEDA786967D7B42EF

        Issued to: Go Daddy Secure Certificate Authority - G2
        Issued by: Go Daddy Root Certificate Authority - G2
        Expires:   Sat May 03 00:00:00 2031
        SHA1 hash: 27AC9369FAF25207BB2627CEFACCBE4EF9C319B8

            Issued to: Pololu Corporation
            Issued by: Go Daddy Secure Certificate Authority - G2
            Expires:   Sat Aug 31 11:35:25 2013
            SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0

The signature is timestamped: Wed Sep 12 14:52:19 2012
Timestamp Verified by:
    Issued to: Starfield Services Root Certificate Authority
    Issued by: Starfield Services Root Certificate Authority
    Expires:   Mon Dec 31 16:59:59 2029
    SHA1 hash: 5D003860F002ED829DEAA41868F788186D62127F

        Issued to: Starfield Services Timestamp Authority
        Issued by: Starfield Services Root Certificate Authority
        Expires:   Wed Apr 26 00:00:00 2017
        SHA1 hash: AEAC793CDD107ACFB314A2FE384A8F16840B7C26

SignTool Error: A certificate chain processed, but terminated in a root
        certificate which is not trusted by the trust provider.

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

C:\Users\david.POLOLU\Desktop\sign_inf>"C:\Program Files (x86)\Windows Kits\8.0\
bin\x86\signtool.exe" verify /v /pa pololu.cat

Verifying: pololu.cat
Signature Index: 0 (Primary Signature)
Hash of file (sha1): 5AE4F370471009C8B0ED936C9AE19ED14ABD67D7

Signing Certificate Chain:
    Issued to: Go Daddy Root Certificate Authority - G2
    Issued by: Microsoft Code Verification Root
    Expires:   Thu Apr 15 13:07:40 2021
    SHA1 hash: 842C5CB34B73BBC5ED8564BDEDA786967D7B42EF

        Issued to: Go Daddy Secure Certificate Authority - G2
        Issued by: Go Daddy Root Certificate Authority - G2
        Expires:   Sat May 03 00:00:00 2031
        SHA1 hash: 27AC9369FAF25207BB2627CEFACCBE4EF9C319B8

            Issued to: Pololu Corporation
            Issued by: Go Daddy Secure Certificate Authority - G2
            Expires:   Sat Aug 31 11:35:25 2013
            SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0

The signature is timestamped: Wed Sep 12 14:52:19 2012
Timestamp Verified by:
    Issued to: Starfield Services Root Certificate Authority
    Issued by: Starfield Services Root Certificate Authority
    Expires:   Mon Dec 31 16:59:59 2029
    SHA1 hash: 5D003860F002ED829DEAA41868F788186D62127F

        Issued to: Starfield Services Timestamp Authority
        Issued by: Starfield Services Root Certificate Authority
        Expires:   Wed Apr 26 00:00:00 2017
        SHA1 hash: AEAC793CDD107ACFB314A2FE384A8F16840B7C26

SignTool Error: WinVerifyTrust returned error: 0x800B010A
        A certificate chain could not be built to a trusted root authority.

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

C:\Users\david.POLOLU\Desktop\sign_inf>"C:\Program Files (x86)\Windows Kits\8.0\
bin\x86\signtool.exe" verify /v /kp pololu.cat

Verifying: pololu.cat
Signature Index: 0 (Primary Signature)
Hash of file (sha1): 5AE4F370471009C8B0ED936C9AE19ED14ABD67D7

Signing Certificate Chain:
    Issued to: Go Daddy Root Certificate Authority - G2
    Issued by: Microsoft Code Verification Root
    Expires:   Thu Apr 15 13:07:40 2021
    SHA1 hash: 842C5CB34B73BBC5ED8564BDEDA786967D7B42EF

        Issued to: Go Daddy Secure Certificate Authority - G2
        Issued by: Go Daddy Root Certificate Authority - G2
        Expires:   Sat May 03 00:00:00 2031
        SHA1 hash: 27AC9369FAF25207BB2627CEFACCBE4EF9C319B8

            Issued to: Pololu Corporation
            Issued by: Go Daddy Secure Certificate Authority - G2
            Expires:   Sat Aug 31 11:35:25 2013
            SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0

The signature is timestamped: Wed Sep 12 14:52:19 2012
Timestamp Verified by:
    Issued to: Starfield Services Root Certificate Authority
    Issued by: Starfield Services Root Certificate Authority
    Expires:   Mon Dec 31 16:59:59 2029
    SHA1 hash: 5D003860F002ED829DEAA41868F788186D62127F

        Issued to: Starfield Services Timestamp Authority
        Issued by: Starfield Services Root Certificate Authority
        Expires:   Wed Apr 26 00:00:00 2017
        SHA1 hash: AEAC793CDD107ACFB314A2FE384A8F16840B7C26

SignTool Error: WinVerifyTrust returned error: 0x800B010A
        A certificate chain could not be built to a trusted root authority.

Number of files successfully Verified: 0
Number of warnings: 0
Number of errors: 1
Edytuj # 4: sekcja DefaultInstall to nie-nie

wdokumentacja sekcji DefaultInstall od Microsoft odkryłem to:

Uwaga Plik INF pakietu sterownika nie może zawierać INFDefaultInstall Sekcja, jeśli pakiet sterowników ma być podpisany cyfrowo.

Czy ktoś wie, dlaczego to prawda? Nie mogłem znaleźć wyjaśnienia.

W każdym razie, wyjąłem sekcję DefaultInstall mojego pliku INF, więc od teraz muszę go przetestować, uruchamiając małą napisaną przeze mnie bibliotekę DLL, która wywołujeSetupCopyOemInf.

Wciąż nie ma szczęścia; Ciągle otrzymuję niezweryfikowane ostrzeżenie wydawcy na komputerze z systemem Windows Vista.

Edytuj # 5: Sterownik JLink jest poprawnie podpisany

Grzebałem w C: Windows 32 ServerStore Repozytorium, aby spróbować znaleźć poprawnie podpisane pakiety sterowników. Pierwszym interesującym, który znalazłem, jest JLinkCDC.cat/JLinkCDC.inf. Wersja pliku Inf toDriverVer=01/25/2012,6.0.2600.4. Jeśli na komputerze z systemem Windows Vista zadzwonię do SetupCopyOemInf na plik inf (używając mojej biblioteki DLL), otrzymam odpowiedni komunikat informujący mnie, kim jest wydawca (Segger GMBH lub coś w tym stylu). Dlatego możliwe jest prawidłowe podpisywanie pakietów sterowników, ale w jakiś sposób GoDaddy lub coś robimy źle.

Sterownik JLinkCDC.inf jest bardzo podobny do mojego sterownika, ponieważ jest to tylko jeden plik i używa usbser.sys. Łańcuch zaufania ich podpisu sięga do głównego urzędu certyfikacji VeriSign klasy 3 - G5.

Zasadniczo, ten sterownik JLinkCDC jest podobny do mojego i działa, więc planuję uważnie się temu przyjrzeć, aby zobaczyć, jakie są różnice.

Thedane wyjściowe signtool sprawdź dla JLinkCDC.cat wygląda bardzo podobnie do mojego, z wyjątkiem tego, że wraca do Verisign zamiast GoDaddy.

Edytuj # 6: Drobne zmiany

Aby uczynić mój sterownik bardziej podobnym do JLinkCDC.inf, dodałemDriverPackageType=PlugAndPlay do pliku INF i skróciłem nazwy plików: pliki są teraz nazywane polser.cat i polser.inf. Wciąż nie ma szczęścia!

Edytuj # 7: Pewien sukces!

Myślę, że następujące rzeczy są prawdziwe; Proszę, popraw mnie jeśli się mylę:

Dla pakietu sterowników (plik .cat), właściwa opcja dlasigntool verify jest/pa. Wnioskuję z tegoKMCS_Walkthrough.doc.W przypadku pakietu sterowników system Windows uważa, że ​​wydawca jest weryfikowany tylko wtedy, gdy łańcuch zaufania powraca do certyfikatu w folderze „Zaufane główne urzędy certyfikacji” w pliku certmgr.msc.W przypadku pakietu sterowników można go podpisać za pomocą certyfikatu krzyżowego (rozszerzającego łańcuch zaufania z gdroot-g2.crt na katalog główny weryfikacji kodu Microsoft), ale system Windows wydaje się to ignorować. Dzieje się tak, ponieważ katalog główny weryfikacji kodu firmy Microsoft nie jest „zaufanym głównym urzędem certyfikacji”.Istnieją magazyny certyfikatów dla bieżącego użytkownika i certyfikaty dla komputera lokalnego. Oba mają znaczenie, więc powinieneś użyćPrzystawka Certyfikaty MMC aby zobaczyć oba. Certmgr.msc pokazuje tylko te dla bieżącego użytkownika.Windowspowinien płynnie dodawać „Go Daddy Root Certificate Authority - G2” (gdroot-g2.crt) w folderze „Zaufane główne urzędy certyfikacji”, gdy jest to konieczne, pobierając go z Windows Update, ale tak nie jest.Więcej informacji tutaj.

Użyłem Podglądu zdarzeń Windows na maszynie testowej, aby zobaczyć, co się stało. Wygląda na to, że system Windows automatycznie pobierze „główny ośrodek certyfikacji Go Daddy - G2”, ale dopiero po wyświetleniu niepożądanego niezweryfikowanego okna ostrzegawczego wydawcy. Gdy tylko użytkownik zamknie to okno dialogowe, certyfikat zostanie pobrany z witryny Windows Update, więc następna próba instalacji powinna się powieść. Co ciekawe, automatycznie pobiera certyfikat Starfield (który jest korzeniem łańcucha zaufania dla mojego znacznika czasu) w odpowiednim czasie.

Podpis podpisałem, aby pracować na komputerach z systemem Windows 7 i Windows Vista, klikając dwukrotnie plik gdroot-g2.crt i importując go, zanim spróbuję zainstalować sterowniki. Zobaczę, czy ten proces można zautomatyzować i dodać do instalatora.

Znalazłem pakiet sterowników od innej firmy (JLinkCDC.cat), który został podpisany certyfikatem VeriSign, zakorzeniony w „Publicznym głównym organie certyfikacji VeriSign klasy 3 - G5”. Ten certyfikat jest na wszystkich komputerach, na których patrzyłem, więc jeśli korzystasz z VeriSign zamiast Go Daddy, myślę, że możesz uniknąć tego problemu w Windows Update.

Zauważyłem, że certyfikaty VeriSign używają SHA1, podczas gdy certyfikaty mojego Go Daddy używają SHA256 dla algorytmu podpisu i algorytmu skrótu podpisu. Nie jestem pewien, czy to ma znaczenie.

Edytuj # 8: Poprosił Microsoft o pomoc

Zobacz dyskusję i moje wnioski na forach MSDN:http://social.msdn.microsoft.com/Forums/en-US/wdk/thread/1fede768-7925-4f30-8eef-ce5bd08b0b60

questionAnswers(4)

yourAnswerToTheQuestion