De forma predeterminada, todas las versiones de Windows de 64 bits, a partir de Windows 7, prohíben instalar controladores de dispositivos que no estén firmados con una firma digital válida. Los controladores no firmados están bloqueados por el sistema operativo. La firma digital garantiza (hasta cierto punto) que el controlador ha sido liberado por un determinado desarrollador o proveedor y que su código no se ha modificado después de que se firmó.
En Windows 10, 8.1 y 7 de 64 bits (x64), hay varias formas de deshabilitar la verificación de la firma del controlador para los controladores no firmados: mediante una política de grupo o un modo de arranque de prueba. Hoy mostraremos cómo firmar cualquier controlador sin firmar para la versión de 64 bits de Windows 10 o Windows 7.
Suponga que tiene un determinado controlador de dispositivo sin firmar (sin firma digital) para Windows 10 x64 o Windows 7 x64. En este ejemplo, es el controlador de una tarjeta gráfica bastante antigua. El archivo con los controladores para su versión de Windows se descargó del sitio web del proveedor (pude encontrar la versión del controlador de video para Windows Vista x64) y su contenido se extrajo en c: tools drv1 . Intentemos instalar el controlador agregándolo a la tienda de controladores de Windows con un estándar pnputil herramienta:
Pnputil –a c:toolsdrv1xg20gr.inf
Nota. Este comando y todos los siguientes deben ejecutarse en el símbolo del sistema como administrador.
Durante la instalación del controlador, Windows 7 muestra una advertencia de que el sistema no puede verificar la firma digital de este controlador:
Windows can’t verify the publisher of this driver software.
En Windows 10, esta advertencia no aparece, pero aparece una advertencia en la consola:
Processing inf: xg20gr.inf
Adding the driver package failed: The third-party INF does not contain digital signature information.
Si hace clic derecho en el archivo del controlador inf y selecciona Instalar en pc al instalar un controlador desde el Explorador de archivos, recibe un error:
The third-party INF does not contain digital signature information.
Intentemos firmar este controlador con un certificado autofirmado.
Herramientas para firmar controladores
Para generar una firma y firmar el controlador, debe descargar e instalar las siguientes herramientas de desarrollo de aplicaciones de Windows (con la configuración predeterminada):
- Windows SDK (o Microsoft Visual Studio 2005 o posterior) para su versión de Windows. Estos paquetes incluyen herramientas de firma de Windows SDK para escritorio, que incluye la utilidad necesaria: signtool.exe;
- Kit de controladores de Windows 7.1.0.
Consejo. En Windows 10, puede usar las versiones más recientes de Windows SDK y Windows Driver Kit. Antes de instalar estas herramientas, asegúrese de que .NET Framework 4 esté instalado en su computadora.
Crear un certificado autofirmado y una clave privada
Cree una carpeta C: DriverCert en la raíz de la unidad del sistema.
Abra el símbolo del sistema y vaya al siguiente directorio:
cd C:Program Files (x86)Microsoft SDKsWindowsv7.1bin
Cree un certificado autofirmado y una clave privada, que se emite, por ejemplo, para la empresa WinOSHub:
makecert -r -sv C:DriverCertmyDrivers.pvk -n CN="WinOSHub" C:DriverCertmyDrivers.cer
Durante la creación del certificado, la herramienta le pedirá que especifique una contraseña para la clave, déjela P @ ss0wrd.
Cree una clave pública para un certificado de editor (PKSC) que hemos creado anteriormente:
cert2spc C:DriverCertmyDrivers.cer C:DriverCertmyDrivers.spc
Combine la clave pública (.spc) y la clave privada (.pvk) en un solo archivo de certificado con formato Intercambio de información personal (.pfx):
pvk2pfx -pvk C:DriverCertmyDrivers.pvk -pi P@ss0wrd -spc C:DriverCertmyDrivers.spc -pfx C:DriverCertmyDrivers.pfx -po P@ss0wrd
Propina. Puede crear un certificado de firma de código autofirmado sin utilizar herramientas de terceros mediante el cmdlet de PowerShell 5.0 – New-SelfSifgnedCertificate:
$cert = New-SelfSignedCertificate -Subject "Woshub” -Type CodeSigningCert -CertStoreLocation cert:LocalMachineMy
Luego, debe exportar este certificado al archivo pfx con la contraseña:
$CertPassword = ConvertTo-SecureString -String “P@ss0wrd” -Force –AsPlainText
Export-PfxCertificate -Cert $cert -FilePath C:DriverCertmyDrivers.pfx -Password $CertPassword
Nota. Aunque el certificado tiene un período de validez limitado, la expiración del certificado CodeSigning significa que no puede crear nuevas firmas. La validez del controlador ya firmado por este certificado es ilimitada (o las firmas antiguas son válidas durante la marca de tiempo especificada).
Creación de un archivo de catálogo (CAT) para el paquete de controladores
Crea el directorio C: DriverCert xg20 y copie todos los archivos de la carpeta en la que se extrajo originalmente el controlador del archivo (c: tools drv1 ). Asegúrese de que haya archivos con las extensiones .sys y .inf entre estos archivos (en nuestro caso, son xg20grp.sys y xg20gr.inf).
Vaya al directorio:
cd C:WinDDK7600.16385.1binselfsign
Genere un archivo CAT (contiene información sobre todos los archivos en el paquete del controlador) en la base del archivo INF. En la base de un archivo inf usando el inf2cat.exe herramienta (incluida en el Kit de controladores de Windows – WDK) genera un archivo cat para su plataforma (contiene información sobre todos los archivos en el paquete de controladores):
inf2cat.exe /driver:"C:DriverCertxg20" /os:7_X64 /verbose
Para asegurarse de que el procedimiento fue correcto, verifique si el archivo de registro contiene los mensajes:
Signability test complete.
|
y
Catalog generation complete.
|
Nota. En mi caso, el comando Inf2Cat.exe devolvió un error:
Signability test failed.
Errors:
22.9.7: DriverVer set to incorrect date (must be postdated to 4/21/2009 for newest OS) in hdx861a.inf
Para corregir el error, busque la línea con DriverVer = en el [Version] sección y reemplácelo con:
DriverVer=05/01/2009,9.9.9.9
Después de ejecutar el comando, el archivo xg20gr.cat debe actualizarse en el directorio de controladores.
Firma del controlador con certificado autofirmado
Vaya a la siguiente carpeta:
cd C:Program Files (x86)Microsoft SDKsWindowsv7.1Bin
Firme el conjunto de archivos del controlador con el certificado que creó anteriormente utilizando Globalsign como servicio de marca de tiempo. El siguiente comando firmará el archivo CAT con una firma digital utilizando un certificado almacenado en un archivo PFX, protegido por contraseña:
signtool sign /f C:DriverCertmyDrivers.pfx /p P@ss0wrd /t http://timestamp.verisign.com/scripts/timstamp.dll /v C:DriverCertxg20xg20gr.cat
Si el archivo se firmó correctamente, debería aparecer el siguiente mensaje:
Successfully signed: C:DriverCertxgxg20gr.cat
Number of files successfully Signed: 1
Propina. La firma digital del controlador está contenida en el archivo .cat al que se hace referencia en el archivo .inf. Puede verificar la firma digital del controlador en el archivo cat usando el siguiente comando:
SignTool verify /v /pa c:DriverCertxgxg20gr.cat
O en las propiedades del archivo en la pestaña Firmas digitales:
El archivo CAT contiene firmas digitales (huellas digitales) de todos los archivos que se encuentran en el directorio del controlador (archivos enumerados en el archivo INF en la sección CopyFiles). Si se ha modificado alguno de estos archivos, la suma de comprobación de los archivos no coincidirá con los datos del archivo CAT y, como resultado, la instalación de dicho controlador fallará.
Instalación del certificado autofirmado
Dado que el certificado que creamos está autofirmado, el sistema no confía en él de forma predeterminada. Agregue su certificado al almacén de certificados del equipo local. Puedes hacerlo usando los siguientes comandos:
certmgr.exe -add C:DriverCertmyDrivers.cer -s -r localMachine ROOT
certmgr.exe -add C:DriverCertmyDrivers.cer -s -r localMachine TRUSTEDPUBLISHER
O hágalo con el asistente gráfico de importación de certificados (debe colocar el certificado en el Editores de confianza y Autoridades de certificación raíz de confianza tiendas de la máquina local). En un dominio, puede distribuir este certificado a la computadora cliente mediante la Política de grupo.
Nota. Puede verificar si el certificado que creamos está en la lista de certificados confiables abriendo el complemento de administración de certificados (certmgr.msc) y asegurándose de que nuestro certificado (emitido para nuestra empresa) esté en las tiendas correspondientes.
Instalación del controlador firmado con el certificado autofirmado
Intente instalar el controlador que hemos firmado nuevamente usando el comando:
Pnputil –i –a C:DriverCertxg20xg20gr.inf
Ahora no verá la advertencia sobre la falta de firma digital del controlador.
Successfully installed the driver on a device on the system.
Driver package added successfully.
La siguiente advertencia aparece en Windows 7 x64: ¿Desea instalar el software de este dispositivo? En Windows 10 x64 1803, esta ventana emergente no aparece. Haciendo click «Instalar en pc», instala el controlador en el sistema.
Si por alguna razón el controlador no está instalado, el registro detallado de instalación del controlador se encuentra en el archivo C: Windows inf setupapi.dev.log. Este archivo de registro le permite obtener más información sobre los errores de instalación del controlador. En la mayoría de los casos, hay un error de «El paquete de controladores falló en la validación de la firma»; lo más probable es que esto signifique que el certificado del controlador no se agrega al almacén de certificados de confianza.
Si la instalación del controlador fue exitosa, el archivo setupapi.dev.log debe contener las siguientes líneas:
>>> [Device Install (DiInstallDriver) - C:WINDOWSSystem32DriverStoreFileRepositoryxg20gr.inf_amd64_c5955181214aa12bxg20gr.inf]
>>> Section start 2018/07/22 23:32:57.015
cmd: Pnputil -i -a c:DriverCertxgxg20gr.inf
ndv: Flags: 0x00000000
ndv: INF path: C:WINDOWSSystem32DriverStoreFileRepositoryxg20gr.inf_amd64_c5955181214aa12bxg20gr.inf
inf: {SetupCopyOEMInf: C:WINDOWSSystem32DriverStoreFileRepositoryxg20gr.inf_amd64_c5955181214aa12bxg20gr.inf} 13:23:37.046
inf: Copy style: 0x00000000
inf: Driver Store Path: C:WINDOWSSystem32DriverStoreFileRepositoryxg20gr.inf_amd64_c5955181214aa12bxg20gr.inf
inf: Published Inf Path: C:WINDOWSINFoem23.inf
inf: {SetupCopyOEMInf exit (0x00000000)} 13:23:37.077
<<< Section end 2018/07/22 13:23:37.155
<<< [Exit status: SUCCESS]
Como puede ver, para instalar el controlador autofirmado ni siquiera tuvimos que deshabilitar la verificación de la firma digital de los controladores con los comandos bcdedit.exe:
bcdedit.exe /set loadoptions DISABLE_INTEGRITY_CHECKS
bcdedit.exe /set testsigning ON
Artículos Interesantes
Relacionados:
Contenido