El controlador INF firmado funciona en la computadora donde se firmó, no en otros

Mi compañía compró unCertificado de Firma del Conductor de Go Daddy. Lo usé para firmar un archivo INF simple que es un controlador para algunos de nuestros dispositivos USB que usan usbser.sys de Microsoft. Todo parece funcionar en la computadora de Windows 7 de 64 bits donde lo firmé: si hago clic derecho en el archivo INF y selecciono "Instalar", la segunda advertencia que veo es esta buena advertencia que muestra el nombre correcto del editor:

Sin embargo, si voy a una computadora diferente (Windows Vista de 64 bits), haga clic derecho en el archivo INF y seleccione "Instalar", luego aparece este mensaje de error:

Esto me hace pensar que mis controladores no están firmados correctamente, y la única razón por la que se ve bien en mi computadora es debido a algún certificado raíz / intermedio / cruzado que instalé durante el proceso de instalación de Go Daddy. Definitivamente quiero que mis usuarios puedan ver que somos el editor verificado sin tener que instalar manualmente un certificado en su computadora.

El archivo INF y el archivo .cat en el mismo directorio.

¿Alguien sabe por qué sucede esto y cómo puedo solucionarlo?

Sospecho que el principal problema es que me sale este error cuando ejecutosigntool verify /v pololu.cat (más detalles a continuación), y no he descubierto por qué:

SignTool Error: una cadena de certificado procesada, pero terminada en un certificado raíz en el que el proveedor de confianza no confía.

Detalles de mi procedimiento

losCertificado de Firma del Conductor Es un nuevo producto de Go Daddy que lanzaron hace unas semanas. No estoy totalmente seguro de cómo es diferente de laCertificado de firma de código, pero es el mismo precio. Seguí elInstrucciones en el sitio web de Go Daddy para descargar e instalar el certificado., aunque las instrucciones no coincidan perfectamente con la realidad. Después de instalar el Microsoft Cross Certificate en el paso 1, vi un mensaje de advertencia rojo que decía:

Antes de que pueda instalar su certificado, debe usar Windows Update para actualizar sus certificados raíz o descargar e instalar manualmente el certificado raíz desde nuestro repositorio.

No estoy seguro de qué hacer al respecto. Instalé algunos certificados raíz de GoDaddy desde su repositorio, pero no hubo una diferencia notable.

Instalé la última versión (8.0) de laKit de controladores de Windows (WDK) y luego instaló la última versión (8.0) de laKit de desarrollo de software de Windows (SDK) para Windows 8. Esto me da acceso a lainf2cat ysigntool utilidades Ambos kits se lanzaron en el último mes, por lo que es posible que haya algunos errores nuevos que estamos pisando.

En un nuevo directorio, pongo tres archivos:

pololu_usb_to_serial.inf, el archivo INF que quiero firmar. Es largo pero simple;Puede leerlo aquí. Este archivo INF es un controlador independiente; no se necesitan otros archivos en nuestro paquete de controladores. Este archivo es básicamente el mismo que la versión que nuestra compañía ha distribuido con éxito (sin firmar) durante años, pero tuve que hacer algunos cambios para que Inf2Cat lo aceptara.mscvr-cross-gdroot-g2.crt, que descargué de laGo Daddy certificado repositorio. Creo que este es el Certificado Cruzado que demuestra que Microsoft confía en la "Autoridad de Certificación de Raíz Go Daddy - G2", pero no estoy totalmente seguro de si este es el certificado correcto para usar.sign_it.bat, el archivo por lotes que corro para hacer la firma.

El archivo por lotes solo contiene:

"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

El primer comando invocainf2cat del kit de controladores de Windows. los/v La opción la hace verbosa. los/driver:%~dp0 La opción lo apunta al directorio que contiene el archivo por lotes; una. no funciona por alguna razón y esto es mejor que tener que codificar la ruta completa. los/os La opción especifica todos los sistemas operativos que me gustaría admitir con este paquete de controladores. Este comando creapololu.cat.

El segundo comando invocasigntool del Kit de desarrollo de software de Windows para firmar el archivo de catálogo. los/v La opción la hace verbosa. los/ac la opción especifica qué uso de certificado cruzado (ver # 2 arriba). los/n La opción especifica el nombre del certificado a usar (ese certificado se instala en mi computadora de acuerdo concertmgr.msc). los/t La opción especifica la URL del servidor de sello de hora de Go Daddy.

Aquí está la salida en el símbolo del sistema cuando ejecuto el archivo por lotes:

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

Como dije, mantengo el archivo .cat y .inf juntos en el mismo directorio, pero solo funcionan correctamente en la computadora donde los firmé.

Verificación con Signtool

lossigntool La utilidad de Microsoft también tiene una función de "verificación" que le permite verificar si su firma es correcta. Hay tres políticas diferentes que puede usar al verificar y cada una da resultados diferentes:

losPolítica de verificación del controlador de Windows dice que mi cadena de firmas no se remonta a Microsoft e imprime un mensaje de error acerca de que mi raíz no es confiable. Eso me parece un problema.losPolítica de verificación de autenticodo predeterminada (/paTambién dice que mi cadena de firmas no se remonta a Microsoft, pero no da un error.losPolítica de firma del controlador en modo kernel (/kp, que probablemente no sea aplicable porque no estoy firmando los controladores en modo kernel) dice que mi cadena de firmas se remonta a Microsoft y no da ningún error.

¿Alguien sabe qué política usa Windows para los archivos INF? Eso al menos me ayudaría a reducir el problema.

Aquí está la salida completa y detallada designtool 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

La salida se veía igual cuando se ejecuta en la computadora donde firmé el controlador (donde está funcionando) y en la otra computadora (donde no está funcionando).

Preguntas similares sobre StackOverflow

Firma del controlador Thawte para Windows de 64 bits - La solución al problema de este tipo fue agregar una directiva CatalogFile al archivo INF, pero ya lo tengo. (CatalogFile=pololu.cat).

Edit # 1: La firma de ejecutables funciona

Usé Signtool con esas mismas opciones para firmar un archivo ejecutable (instalador de NSIS), y funcionó correctamente en el primer intento, en ambas computadoras. Así que creo que hay algo diferente en la política de firma para los archivos del controlador INF y eso es lo que me está jodiendo.

Edición # 2: Advertencia en el certificado de GoDaddy

Si hago doble clic enmscvr-cross-gdroot-g2.crt, en la pestaña General dice "Windows no tiene suficiente información para verificar este certificado". En la pestaña Ruta de certificación, en "Estado del certificado:", dice "No se pudo encontrar el emisor de este certificado". También veo esas mismas advertencias si hago doble clic engd_ms_drv_sign_bundle.p7b (un paquete de certificados de GoDaddy) y abra el primer certificado.

Se supone que el emisor de ambos certificados es la raíz de verificación de código de Microsoft. ¿Debo preocuparme por ese mensaje de advertencia?

Edición # 3: Eliminar certificados de GoDaddy

Lindsay del equipo de soporte avanzado de GoDaddy me respondió. Ella unida aesta página de globalsign que explica cómo debe desinstalar los certificados raíz e intermedios de su CA en la computadora donde firma los controladores. Lindsay dice que si no realiza este paso, las herramientas de firma asumirán que esos certificados están presentes en otras computadoras y, por lo tanto, no los incluirán en la firma.

¿Alguien sabe cómo verificar qué certificados se "importan" en una firma? ¿Qué herramientas puedo usar para ver si Lindsay y GlobalSign tienen razón?

Por cierto, tenemos computadoras con Windows XP pero Microsoft dejará de admitir ese sistema operativo pronto. A pesar de lo que dice GlobalSign, haytiene Para ser una manera de hacer que esto funcione en Windows 7.

Basado en el consejo de Lindsay, seguí las instrucciones de Microsoft paraDesactivar la actualización automática de certificados raíz, y luego utilicé la interfaz de usuario decertmgr.msc para eliminar todos los certificados de GoDaddy de las "Autoridades de certificación de raíz de confianza" y las "Autoridades de certificación intermedias". Luego volví a firmar mi archivo inf.

Desafortunadamente, eso no funcionó! Después de firmar, verifiqué que todos los certificados de GoDaddy aún se hayan eliminado.

No he recibido comentarios de GoDaddy sobre la salida designtool verify, o cualquier entrada sobre qué política de firma de controladores debo verificar al realizar la verificación. Esperaba que pudieran ver la salida de verificación y decirme qué estaba haciendo mal, o decirme cómo se vería la salida correcta.

Para completar, aquí están los tres resultados designtool verify Después de que borré esos certificados y volví a firmar los controladores:

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
Edición # 4: la sección DefaultInstall es un no-no

En elDocumentación de la sección DefaultInstall. de Microsoft, descubrí esto:

Nota El archivo INF de un paquete de controladores no debe contener un archivo INF.PredeterminadoInstalar Sección si el paquete del controlador debe ser firmado digitalmente.

¿Alguien sabe por qué eso es verdad? No pude encontrar una explicación.

De todos modos, saqué la sección DefaultInstall de mi archivo INF, así que a partir de ahora tengo que probarlo ejecutando un pequeño archivo DLL que escribí, que llamaSetupCopyOemInf.

Todavía no hay suerte; Sigo recibiendo la advertencia del editor sin verificar en la computadora con Windows Vista.

Edición # 5: el controlador JLink está firmado correctamente

Estaba hurgando en C: \ Windows \ System32 \ DriverStore \ FileRepository para intentar encontrar algunos paquetes de controladores debidamente firmados. El primero interesante que encontré es JLinkCDC.cat/JLinkCDC.inf. La versión del archivo inf esDriverVer=01/25/2012,6.0.2600.4. En la máquina con Windows Vista, si llamo a SetupCopyOemInf en el archivo inf (usando mi DLL), recibo un mensaje adecuado que me indica quién es el editor (Segger GMBH o algo así). Por lo tanto, es posible firmar paquetes de controladores como el mío correctamente, pero de alguna manera GoDaddy o yo estamos haciendo algo mal.

El controlador JLinkCDC.inf es muy similar a mi controlador porque es solo un archivo y usa usbser.sys. La cadena de confianza de su firma se remonta a VeriSign Class 3 Public Primary Certificate Authority - G5.

Básicamente, este controlador JLinkCDC es similar al mío y funciona, así que planeo examinarlo detenidamente para ver cuáles son las diferencias.

lossalida de signtool verificar para JLinkCDC.cat se parece mucho al mío, excepto que se remonta a Verisign en lugar de GoDaddy.

Edición # 6: cambios menores

Para hacer que mi controlador sea más como JLinkCDC.inf, agreguéDriverPackageType=PlugAndPlay al archivo INF y acorté los nombres de los archivos: los archivos ahora se llaman polser.cat y polser.inf. ¡Todavía no hay suerte!

Edit # 7: ¡Un poco de éxito!

Creo que las siguientes cosas son ciertas; Por favor, corríjame si estoy equivocado:

Para un paquete de controladores (archivo .cat), la opción correcta parasigntool verify es/pa. Infiero esto deKMCS_Walkthrough.doc.Para un paquete de controladores, Windows solo considera que se verifica al editor si la cadena de confianza se remonta a un certificado en la carpeta "Entidades de certificación de raíz de confianza" en certmgr.msc.Para un paquete de controladores, puede firmarlo con un certificado cruzado (extendiendo la cadena de confianza de gdroot-g2.crt a la raíz de verificación de código de Microsoft), pero Windows parece ignorarlo. Esto se debe a que la raíz de verificación de código de Microsoft no es una "Autoridad de certificación de raíz de confianza".Hay almacenes de certificados para el usuario actual y certificados para la máquina local. Ambos importan, así que debes usar elComplemento de certificados MMC para ver los dos. Certmgr.msc solo muestra los del usuario actual.Windowsdebe agregar perfectamente la "Autoridad de certificación de raíz de papá de Go - G2" (gdroot-g2.crt) a la carpeta "Autoridades de certificación de raíz de confianza" cuando sea necesario, descargándola desde Windows Update, pero no es así.Más información aquí.

Utilicé el Visor de eventos de Windows en la máquina de prueba para ver qué pasaba. Parece que Windows buscará automáticamente "Go Daddy Root Certificate Authority - G2", pero solo después de que aparezca el cuadro de diálogo de advertencia del publicador no comprobado no deseado. Tan pronto como el usuario cierra ese cuadro de diálogo, el certificado se recupera de Windows Update, por lo que el próximo intento de instalación debería tener éxito. Curiosamente, descarga automáticamente un certificado de Starfield (que es la raíz de la cadena de confianza para mi marca de tiempo) de manera oportuna.

He conseguido que mi firma funcione en computadoras con Windows 7 y Windows Vista haciendo doble clic en gdroot-g2.crt e importándola antes de intentar instalar los controladores. Veré si este proceso se puede automatizar y agregar a un instalador.

Encontré un paquete de controladores de otra compañía (JLinkCDC.cat) que se firmó con un certificado de VeriSign, enraizado en "VeriSign Class 3 Public Primary Certification Authority - G5". Ese certificado está en todas las computadoras que he examinado, por lo que si usa VeriSign en lugar de Go Daddy, creo que puede evitar este problema con Windows Update.

Noté que los certificados de VeriSign usan SHA1 mientras que mis certificados de Go Daddy usan SHA256 para el algoritmo de firma y el algoritmo de hash de firma. No estoy seguro si eso importa.

Edición # 8: Pidió ayuda a Microsoft

Vea la discusión y mi conclusión en los foros de MSDN:http://social.msdn.microsoft.com/Forums/en-US/wdk/thread/1fede768-7925-4f30-8eef-ce5bd08b0b60