windows - tag - El controlador INF firmado funciona en la computadora donde fue firmado, no en otros
mp3tag v2 79 (4)
Mi empresa compró un certificado de firma de 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 recibo este error cuando ejecuto signtool 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
El Certificado de Firma de Conductor es un nuevo producto de Go Daddy que lanzaron hace unas semanas. No estoy totalmente seguro de en qué se diferencia del Certificado de firma de código , pero es el mismo precio. Seguí las instrucciones en el sitio web de Go Daddy para descargar e instalar el certificado , aunque las instrucciones no coinciden 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) del Kit de controladores de Windows (WDK) y luego instalé la última versión (8.0) del Kit de desarrollo de software de Windows (SDK) para Windows 8 . Esto me da acceso a las utilidades inf2cat
y signtool
. 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; Puedes 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é del repositorio de certificados de Go Daddy . 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 ejecuto 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 invoca a inf2cat
desde el Kit de controladores de Windows. La opción /v
hace detallado. La opción /driver:%~dp0
apunta al directorio que contiene el archivo por lotes; a no funciona por alguna razón y esto es mejor que tener que codificar la ruta completa. La opción /os
especifica todos los sistemas operativos que me gustaría admitir con este paquete de controladores. Este comando crea pololu.cat
.
El segundo comando invoca signtool
desde el Kit de desarrollo de software de Windows para firmar el archivo de catálogo. La opción /v
hace detallado. La opción /ac
especifica qué uso de certificado cruzado (ver # 2 arriba). La opción /n
especifica el nombre del certificado a usar (ese certificado se instala en mi computadora de acuerdo con certmgr.msc
). La opción /t
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 letrero
La utilidad signtool
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:
- La Política de verificación de controladores 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.
- La Política de verificación de autenticodo predeterminada (
/pa
) también dice que mi cadena de firmas no se remonta a Microsoft, pero no da un error. - La política de firma de controladores en modo kernel (
/kp
, que probablemente no sea aplicable porque no estoy firmando 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 de signtool 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 de 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 sobre el certificado de GoDaddy
Si hago doble clic en mscvr-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 en gd_ms_drv_sign_bundle.p7b
(un paquete de certificados de GoDaddy) y abro 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 volvió a llamarme. Ella se vinculó a esta página desde 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, tiene que haber una manera de hacer que esto funcione en Windows 7.
Basándome en los consejos de Lindsay, seguí las instrucciones de Microsoft para desactivar la Actualización automática de certificados raíz y luego utilicé la interfaz de usuario de certmgr.msc
para eliminar todos los certificados de GoDaddy de "Trusted Root Authorification Authorities" y "Intermediate Certification Authorities". Luego volví a firmar mi archivo inf.
Desafortunadamente, eso no funcionó! Después de firmar, volví a verificar que todos los certificados de GoDaddy todavía se hayan eliminado.
No he recibido comentarios de GoDaddy sobre la salida de signtool verify
, ni ninguna información 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 de la signtool verify
después de que signtool verify
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 la documentación de la sección DefaultInstall de Microsoft, descubrí esto:
Nota El archivo INF de un paquete de controladores no debe contener una sección de instalación predeterminada de INF si el paquete de controladores debe firmarse 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 llama a SetupCopyOemInf .
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 es DriverVer=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 correcto 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.
La salida de signtool Verify para JLinkCDC.cat es muy similar a la mía, excepto que se remonta a Verisign en lugar de GoDaddy.
Edición # 6: cambios menores
Para hacer que mi controlador sea más parecido a 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 para la
signtool verify
es/pa
. Lo KMCS_Walkthrough.doc de KMCS_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 confiable".
- Hay almacenes de certificados para el usuario actual y certificados para la máquina local. Ambos son importantes, por lo que debe usar el complemento de certificados de MMC para ver ambos. Certmgr.msc solo muestra los del usuario actual.
- Windows debe agregar sin problemas "Go Daddy Root Certificate Authority - G2" (gdroot-g2.crt) a la carpeta "Trusted Root Certification Authorities" cuando sea necesario, descargándolo 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, se obtiene el certificado 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
A partir del 9/27/2012, el certificado de firma de controlador GoDaddy no funcionará con Windows Vista o Windows 7. Solo funcionará con Windows 8. El certificado GoDaddy solo está disponible con SHA256.
Terminamos obteniendo uno de GlobalSign (MS Authenticode).
Desde http://msdn.microsoft.com/en-us/library/windows/hardware/hh967734%28v=vs.85%29.aspx :
Firmando un paquete de drivers con dos firmas.
En algunos casos, es posible que desee firmar un paquete de controladores con dos firmas diferentes. Por ejemplo, suponga que desea que su controlador se ejecute en Windows 7 y Windows 8. Windows 8 admite firmas creadas con el algoritmo de hash SHA256, pero Windows 7 no. Para Windows 7, necesita una firma creada con el algoritmo de hash SHA1.
2012-09-28 Actualización: El GlobalSign funcionó. Dejo que Firefox 15 descargue el enlace provisto por GlobalSign (protegido por una contraseña de recolección). Terminé con Firefox con el certificado firmado y descargando otros 3 certificados de GlobalSign. El certificado firmado se exportó desde Firefox a un archivo .p12. Luego, se hizo doble clic en los cuatro archivos para importarlos en el Almacén de certificados de MS usando valores predeterminados automáticos. El controlador y el paquete se firmaron y probaron en un Windows 7 Ultimate x64 sin errores de firma del controlador. El controlador BSoD''d, pero eso es un problema diferente. ;)
GoDaddy solo le otorgará crédito en el sitio web menos $ 15 y solo si lo revoca dentro de los 30 días de la compra.
2016-01-13 Actualización: https://technet.microsoft.com/en-us/library/security/3033929 Aviso de seguridad de Microsoft 3033929 Disponibilidad del soporte de firma de código SHA-2 para Windows 7 y Windows Server 2008 R2 Publicado: 10 de marzo , 2015 ... Básicamente, debe instalar la actualización de seguridad en los enlaces provistos por Microsoft, que generalmente se realiza automáticamente con Windows Update.
Ahora estamos utilizando certificados de firma de código EV de GlobalSign. Advertencia: SafeSign no funciona con los servicios de Windows (por ejemplo, esclavo buildbot).
Debido a la falta de reputación, no puedo actualizar la respuesta de rcpao, pero quería publicar un acuerdo. Hace poco pasé por un proceso similar al intentar firmar un paquete de controladores de Windows 7 con un certificado de firma de controladores de GoDaddy. En resumen, Win7 x64 no aceptaría los controladores, seguramente debido al hash SHA-2 utilizado en el certificado GoDaddy.
Si bien hay artículos que indican que Windows 7 es compatible con la firma SHA-2, no creo que se aplique a las firmas de controladores. Definitivamente, hay algunos textos ambiguos disponibles que hacen que el problema sea menos claro.
Mi empresa terminó comprando un certificado de firma de código de DigiCert que incluye la firma en modo kernel para los controladores. Funcionó como se esperaba, y el costo era comparable a GoDaddy.
Respondiendo a mi propia pregunta:
Terminé obteniendo un certificado de firma de código de Go Daddy y tecleando para que fuera SHA-2 (la otra opción es SHA-1), porque quería la posibilidad de algún día firmar paquetes de controladores que contengan archivos .sys y SHA-2 de GoDaddy. La opción te permite hacer eso. Ahora firmo nuestros archivos .cat utilizando ese certificado junto con el certificado cruzado de Go Daddy G1 a G2 (gdroot-g2_cross.crt), por lo que la cadena de confianza se ve así:
- Autoridad de certificación de clase 2 de Go Daddy (27 96 ba e6 3f 18 01 e2 77 26 1b a0 d7 77 70 02 8f 20 ee e4) (será una CA raíz confiable en la computadora de su usuario)
- Autoridad de certificación Go Daddy Root - G2 (84 1d 4a 9f c9 d3 b2 f0 ca 5f ab 95 52 5a b2 06 6a cf 83 22) (se supone que es una CA raíz confiable, pero depende de que Windows Update funcione de manera confiable)
- Go Daddy Secure Certificate Authority - G2 (27 ac 93 69 fa f2 52 07 bb 26 27 ce fa cc be 4e f9 c3 19 b8)
- Nuestra compañía
Esto ha funcionado a la perfección para nuestras necesidades, pero desafortunadamente, ese plan no nos permite firmar paquetes de controladores que contengan archivos .sys de Kernel-Mode , ya que la cadena de confianza no está enraizada en la raíz de verificación de código de Microsoft. Según mi lectura de kmsigning.doc, la forma correcta de firmar su archivo .cat si tiene archivos de controlador en modo kernel es usar el Certificado Cruzado de Microsoft para Go Daddy G2 (mscvr-cross-gdroot-g2.crt). Todavía no he conseguido que funcione, pero esa será otra discusión.
SHA 2
Tengo que discrepar respetuosamente con rcpao y kris. Por lo que puedo decir, hay un problema con SHA256 en Windows Vista o Windows 7, al menos para la instalación del paquete de controladores . Para cargar un archivo .sys en el kernel, puede haber una historia diferente, y especialmente porque estoy teniendo problemas con la firma de .sys ahora tendré que analizar eso.
PredeterminadoInstalar
La documentación de MSDN de la sección de instalación predeterminada de INF es simplemente incorrecta. Parece que no hay incompatibilidad entre DefaultInstall y la firma del controlador y ahora veo por qué debería haberlo.
Parece que necesita obtener su controlador certificado y firmado por Microsoft, lo que puede lograrse mediante el uso del kit de certificación de hardware (HCK) . Pero para Windows 10 y versiones superiores, están utilizando Hardware Lab Kit (HLK) . Así es como he firmado los controladores en modo kernel, que se realiza después de pasar las pruebas y hacer que Microsoft certifique y firme los archivos .sys y .cat.