Como assinar um driver não assinado para x64 Windows 10, 8.1 ou 7 com um certificado autoassinado Por padrão, todas as versões do Windows de 64 bits, a partir do Windows 7, proíbem a instal ação de drivers de dispositivos que não estejam assinados com uma assinatura di gital válida. Os drivers não assinados são bloqueados pelo sistema operacional. A assinatura digital garante (até certo ponto) que o driver foi liberado por um determinado desenvolvedor ou ou fornecedor, e seu código não foi modificado modificado depois que foi assinado. No Windows 10, 8.1 e 7 de 64 bits (x64), há várias maneiras de desativar a verificação de assinatura de driver para os drivers não assinados: usando uma direti va de grupo ou um modo de inicialização de teste. Hoje mostraremos como assinar qualquer driver não assinado para a versão de 64 bits do Windows 10 ou do Windows 7 . Suponha que você tenha um determinado driver de dispositivo não assinado (sem assinatura digital) para o Windows 10 x64 ou o Windows 7 x64. Neste exemplo, é o driver da placa gráfica antiga. O arquivo com drivers para sua versão do Windows foi baixado do site do fornecedor ( consegui encontrar a versão do driver de vídeo para o Windows Vista x64) e seu conteúdo foi extraído para c: \ tools \ drv1 \. Vamos tentar instalar o driver adicionando-o ao repositório de drivers do Windows com uma ferramenta pnputil padrão: Pnputil –ac:\tools\drv1\xg20gr.inf
Nota Este comando e todos os próximos devem ser executados no prompt de comando como administrador.
Durante a instalação do driver, o Windows 7 exibe um aviso de que o sistema não pode verificar a assinatura digital deste driver: Windows can't verify the publisher of this driver software.
No Windows 10, esse aviso não aparece, aparece, mas um aviso é exibido no console: Processing inf: xg20gr.inf Adding the driver package failed: The third-party INF does not contain digital signature information. information.
Se você clicar com o botão direito no arquivo do driver inf e selecionar Instalar ao instalar um driver do Gerenciador de arquivos, receberá um erro:
The third-party INF does not contain digital signature information.
Vamos tentar assinar este driver com um certificado autoassinado. Conteúdo:
Ferramentas para assinar drivers Criar um certificado autoassinado e uma chave privada Criando um arquivo de catálogo (CAT) para o pacote de driver Assinando o driver usando certificado autoassinado Instalando o certificado autoassinado Instalação do driver assinado com o certificado autoassinado
Ferramentas para assinar drivers
Para gerar uma assinatura e assinar o driver, você precisa baixar e instalar as seguintes ferramentas de desenvolvimento de aplicativos do Windows (com as configurações padrão):
Windows SDK (ou Microsoft Visual Studio 2005 ou posterior) para sua versão do Windows. Esses pacotes incluem as ferramentas de assinatura do Windows SDK para Desktop, que incluem o utilitário necessário - signtool.exe ; Kit de driver do Windows 7.1.0 .
Dica No Windows 10, você pode usar as versões mais recentes do Windows SDK e do Windows Driver Kit. Antes de instalar essas ferramentas, verifique se o .NET Framework 4 está instalado no seu computador.
Criar um certificado autoassinado e uma chave privada Crie uma pasta C: \ DriverCert na raiz da unidade do sistema. Abra o prompt de comando e vá para o seguinte diretório: cd C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\bin
Crie um certificado autoassinado e uma chave privada, que é emitida, por exemplo, para a empresa WinOSHub: makecert -r -sv C:\DriverCert\myDrivers.pvk -n CN="WinOSHub" C:\DriverCert\myDrivers.cer
Durante a criação do certificado, a ferramenta solicitará que você especifique uma senha para a chave, seja ela P @ ss0wrd .
Crie uma chave pública para um certificado de publicador (PKSC) que criamos anteriormente: cert2spc C:\DriverCert\myDrivers.cer C:\DriverCert\myDrivers.spc
Combine a chave pública (.spc) e a chave privada (.pvk) em um único arquivo de certificado com o formato Personal Information Exchange (.pfx): pvk2pfx -pvk C:\DriverCert\Drivers.pvk -pi P@ss0wrd -spc C:\DriverCert\Drivers.spc -pfx C:\DriverCert\Drivers.pfx -po P@ss0wrd
Dica Você pode criar um certificado de assinatura de código autoassinado sem usar ferramentas de terceiros usando o cmdlet do PowerShell 5.0 - New-SelfSifgnedCertificate :
$cert = New-SelfSignedCertificate -Subject "Woshub” -Type CodeSigningCert CertStoreLocation cert:\LocalMachine\My
Então você precisa exportar este certificado para o arquivo pfx com a senha: $CertPassword = ConvertTo-SecureString -String “P@ss0wrd” -Force –AsPlainText Export-PfxCertificate -Cert $cert -FilePath C:\DriverCert\myDrivers.pfx -Password $CertPassword
Nota Embora o certificado tenha um período de validade limitado, a expiração do c ertificado CodeSigning significa que você não pode criar novas assinaturas. A validade do driver já assinado por este certificado é ilimitada (ou as assinaturas antigas são válidas durante o registro de data e hora especificado).
Criando um arquivo de catálogo (CAT) para o pacote de driver Crie o diretório C: \ DriverCert \ xg20 e copie todos os arquivos da pasta na qual o driver do arquivo foi originalmente extraído (c: \ tools \ drv1 \). Certifique-se de que existem arquivos com as extensões .sys e .inf entre esses arquivos (no nosso caso, eles são xg20grp.sys e xg20gr.inf). Vá para o diretório: cd C:\WinDDK\7600.16385.1\bin\selfsign
Gere um arquivo CAT (contém informações sobre todos os arquivos no pacote do driver) na base do arquivo INF. Na base de um arquivo inf usando a ferramenta inf2cat.exe (incluída no Windows Driver Kit - WDK), gere um arquivo cat para sua plataforma (ele contém informações sobre todos os arquivos no pacote do driver): inf2cat.exe /driver:"C:\DriverCert\xg20" /os:7_X64 /verbose
Para certificar-se de que o procedimento estava correto, verifique se o ar quivo de log contém as mensagens: Teste de sinalização completo .
e Geração de catálogo completa .
Nota No meu caso, o comando Inf2Cat.exe retornou um erro: 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 corrigir o erro, localize a linha com DriverVer = na seção [Version] e substitua-a por: DriverVer=05/01/2009,9.9.9.9
Após o comando ser executado, o arquivo xg20gr.cat deve ser atualizado no diretório dos drivers.
Assinando o driver usando certificado autoassinado Vá para a seguinte pasta: cd C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Bin
Assine o conjunto de arquivos do driver com o certificado que você criou anteriormente usando Globalsign como um serviço de registro de data e hora. O seguinte comando assinará o arquivo CAT com uma assinatura digital usando um certificado armazenado em um arquivo PFX, protegido por uma senha: signtool sign /f C:\DriverCert\myDrivers.pfx /p P@ss0wrd /t http://timestamp.verisign.com/scripts/timstamp.dll /v C:\DriverCert\xg20\xg20gr.cat
Se o arquivo for assinado com sucesso, a seguinte mensagem deverá aparecer: Successfully signed: C:\DriverCert\xg\xg20gr.cat Number of files successfully Signed: 1
Dica A assinatura digital do driver está contida no arquivo .cat mencionado no arquivo .inf. Você pode verificar a assinatura digital do driver no arquivo cat usando o seguinte comando: SignTool verify /v /pa c:\DriverCert\xg\xg20gr.cat
Ou nas propriedades do arquivo na guia Assinaturas Digitais:
O arquivo CAT contém assinaturas digitais (impressões digitais) de todos os arquivos que estão no diretório do driver (arquivos listados no arquivo INF na seção CopyFiles). Se algum desses arquivos tiver s ido alterado, a soma de verificação dos arquivos não corresponderá aos dados no arquivo CAT e, como resultado, a instalação desse driver falhará.
Instalando o certificado autoassinado Como o certificado que criamos é autoassinado, por padrão, o sistema não confia nele. Adicione seu certificado ao armazenamento de certificados do computador local. Você pode fazer isso usando os seguintes comandos: certmgr.exe -add C:\DriverCert\Drivers.cer -s -r localMachine ROOT certmgr.exe -add C:\DriverCert\Drivers.cer -s -r localMachine TRUSTEDPUBLISHER
Ou faça isso com o assistente de importação de certificados gráficos (você precisa colocar o certificado nos repositórios de Fornecedores Confiáveis e Autoridades de Certificação Raiz Confiáveis da máquina local). Em um domínio, você pode distribuir esse certificado para o computador cliente usando a Diretiva de Grupo .
Nota Você pode verificar se o certificado que criamos está na lista de certificados confiáveis abrindo o snapin de gerenciamento de certificados (certmgr.msc) e certificando-se de que nosso certificado (emitido para nossa empresa) esteja nos armazenamentos correspondentes.
Dica Quando você verifica o armazenamento de certificados com o utilitário Sigcheck , esse certificado será exibido como não confiável, porque não está listado na lista de certificados raiz da Microsoft (essa lista precisa ser atualizada periodicamente).
Instalação do driver assinado com o certificado autoassinado Tente instalar o driver que assinamos novamente usando o comando: Pnputil –i –a C:\DriverCert\xg20\xg20gr.inf
Agora você não verá o aviso sobre a assinatura digital ausente do driver. Successfully installed the driver on a device on the system. Driver package added successfully.
O seguinte aviso aparece no Windows 7 x64: Você gostaria de instalar o software do dispositivo? No Windows 10 x64 1803, essa janela pop-up não aparece. Ao clicar em " Instalar ", você instala o driver no sistema.
Se, por algum motivo, o driver não estiver instalado, o log detalhado de instalação do driver estará contido no arquivo C: \ Windows \ inf \ setupapi.dev.log . Este arquivo de log permite que você obtenha mais informações sobre os erros de instalação do driver. Na maioria dos casos, há um erro “Validação de assinatura com falha no pacote do driver” - muito provavelmente, isso significa que o certific ado do driver não foi adicionado ao armazenamento de certificados confiáveis.
Se a instalação do driver foi bem-sucedida, o arquivo setupapi.dev.log deverá conter as seguintes linhas: >>> [Device Install (DiInstallDriver) C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr .inf] >>> Section start 2018/07/22 23:32:57.015 cmd: Pnputil -i -ac:\DriverCert\xg\xg20gr.inf ndv: Flags: 0x00000000 ndv: INF path: C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr .inf inf: {SetupCopyOEMInf: C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr .inf} 13:23:37.046 inf: Copy style: 0x00000000 inf: Driver Store Path: C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr .inf inf: Published Inf Path: C:\WINDOWS\INF\oem23.inf inf: {SetupCopyOEMInf exit (0x00000000)} 13:23:37.077 <<< Section end 2018/07/22 13:23:37.155 <<< [Exit status: SUCCESS]
Como você pode ver, para instalar o driver auto-assinado, nem precisávamos desativar a verificação de assinatura digital dos drivers com os comandos bcdedit.exe: bcdedit.exe /set loadoptions DISABLE_INTEGRITY_CHECKS bcdedit.exe /set testsigning ON
How to Sign an Unsigned Driver for x64 Windows 10, 8.1 or 7 with a Self-signed Certificate By default, all 64-bit Windows versions, starting from Windows 7, prohibit to install devices drivers that are not signed with a valid digital signature. Unsigned drivers are blocked by the operating s ystem. The digital signature guarantees (to some extent) that the driver has been released by a certain developer or vendor, and its code hasn’t been modified after it was signed. In 64-bit (x64) Windows 10, 8.1 and 7 there are several ways to disable driver signature verification for the unsigned drivers: using a group policy or a test boot mode. Today we’ll show how to sign any unsigned driver for the 64-bit version of Windows 10 or Windows 7. Suppose you have a certain unsigned device driver (without digital signature) for Windows 10 x64 or Windows 7 x64. In this example, it is the driver for quite old graphics card. The archive with drivers for your Windows version has been downloaded from the vendor’s website (I was able to find the video driver version for Windows Vista x64) and its contents has been extracted to c:\tools\drv1\ . Let’s try to install the driver by adding it to Windows driver store with a sta ndard pnputil tool: Pnputil –a c:\tools\drv1\xg20gr.inf
Note. This command and all the next ones must be run in the command prompt as administrator.
During driver installation, Windows 7 displays a warning that the system can’t verify the digital signature of this driver: Windows can’t verify the publisher of this driver software.
In Windows 10 this warning doesn’t appear, but a warning appears in the console: Processing inf: xg20gr.inf Adding the driver package failed: The third-party INF does not contain digital signature information.
If you right click on the inf driver file and select Install when installing a driver from File Explorer, you receive an error:
The third-party INF does not contain digital signature information.
Let’s try to sign this driver with a self -signed certificate. Contents:
Tools for Signing Drivers Create a Self-Signed Certificate and Private Key Creating a Catalog File (CAT) for Driver Package Signing the Driver Using Self-signed Certificate Installing the Self-Signed Certificate Installation of the Driver Signed with the Self-si gned Certificate
Tools for Signing Drivers To generate a signature and sign the driver, you need to download and install the following Windows application development tools (with the default settings):
Windows SDK (or Microsoft Visual Studio 2005 or later) for your version of Windows. These packages include Windows SDK Signing tools for Desktop, which includes the necessary utility – signtool.exe; Windows Driver Kit 7.1.0 .
Tip. In Windows 10 you can use the newer versions of Windows SDK and Windows Driver Kit. Before installing these tools, make sure that the .NET Frame work 4 is installed on your computer.
Create a Self-Signed Certificate and Private Key Create a C:\DriverCert folder in the root of the system drive. Open the command prompt and go to the following directory: cd C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\bin
Create a self-signed certificate and private key, that is issued, for example, for the company WinOSHub: makecert -r -sv C:\DriverCert\myDrivers.pvk -n CN="WinOSHub" C:\DriverCert\myDrivers.cer
During the creation of the certificate, the tool will prompt you to specify a password for the ke y, let it be P@ss0wrd.
Create a public key for a publisher certificate (PKSC) we have created earlier: cert2spc C:\DriverCert\myDrivers.cer C:\DriverCert\myDrivers.spc
Combine the public key (.spc) and the private key (.pvk) in a single certif icate file with format Personal Information Exchange (.pfx): pvk2pfx -pvk C:\DriverCert\Drivers.pvk -pi P@ss0wrd -spc C:\DriverCert\Drivers.spc -pfx C:\DriverCert\Drivers.pfx -po P@ss0wrd
Tip. You can create a self-signed Code Signing certificate without using third-party tools by using the PowerShell 5.0 cmdlet – New-SelfSifgnedCertificate: $cert = New-SelfSignedCertificate -Subject "Woshub” -Type CodeSigningCert CertStoreLocation cert:\LocalMachine\My
Then you need to export this certificate to the pfx f ile with the password: $CertPassword = ConvertTo-SecureString -String “P@ss0wrd” -Force –AsPlainText Export-PfxCertificate -Cert $cert -FilePath C:\DriverCert\myDrivers.pfx -Password $CertPassword
Note. Although the certificate has a limited validity period, the expiration of the CodeSigning certificate means that you can’t create new signatures. The validity of the driver already signed by this certifi cate is unlimited (or old signatures are valid during the specified timestamp).
Creating a Catalog File (CAT) for Driver Package Create the directory C:\DriverCert\xg20 and copy all files from the folder into which the driver from the archive has been originally extracted (c:\tools\drv1\). Make sure that there are files with the extensions .sys and .inf among these files (in our case, the y are xg20grp.sys and xg20gr.inf). Go to the directory: cd C:\WinDDK\7600.16385.1\bin\selfsign
Generate a CAT file (contains information about all the files in the driver package) on the base of the INF file. On the base of an inf file using the inf2cat.exe tool (included in the Windows Driver Kit – WDK) generate a cat file for your platform (it contains information about all files in the driver package): inf2cat.exe /driver:"C:\DriverCert\xg20" /os:7_X64 /verbose
To make sure that the procedure was correct, check if the log file contains the messages: Signability test complete.
and Catalog generation complete.
Note. In my case the command Inf2Cat.exe returned an 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
To fix the error, find the line with DriverVer = in the [Version] section and replace it with: DriverVer=05/01/2009,9.9.9.9
After the command is executed, the xg20gr.cat file should be updated in the drivers’ directory.
Signing the Driver Using Self-signed Certificate Go to the following folder: cd C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Bin
Sign the set of the driver files with the certificate you have created earlier using Globalsign as a timestamp service. The following command will sign the CAT file with a digital signature using with a certificate stored in a PFX file, protected by a password: signtool sign /f C:\DriverCert\myDrivers.pfx /p P@ss0wrd /t http://timestamp.verisign.com/scripts/timstamp.dll /v C:\DriverCert\xg20\xg20gr.cat
If the file is successfully signed, the following message should appear: Successfully signed: C:\DriverCert\xg\xg20gr.cat Number of files successfully Signed: 1
Tip. The digital signature of the driver is contained in the .cat file referenced in the .inf file. You can check the digital signature of the driver in the cat file using the following command: SignTool verify /v /pa c:\DriverCert\xg\xg20gr.cat
Or in the file properties on the Digital Signatures tab:
The CAT file contains digital signatures (thumbprints) of all the files that are in the driver directory (files listed in the INF file in the CopyFiles section). If any of these files has been changed, the checksum of the files will not match the data in the CAT file, and, as a result, the installation of such a driver will fail.
Installing the Self-Signed Certificate Since the certificate we created is self-signed, by default the system doesn’t trust it. Add your certificate to the local computer certificate store. You can do it using the following commands: certmgr.exe -add C:\DriverCert\Drivers.cer -s -r localMachine ROOT certmgr.exe -add C:\DriverCert\Drivers.cer -s -r localMachine TRUSTEDPUBLISHER
Or do it with the graphical certificate import wizard (you need to place the certificate in the Trusted Publishers and Trusted Root Certification Authorities stores of the local machine). In a domain, you can distribute this certificate to client computer using Group Policy.
Note. You can check if the certificate we created is in the list of trusted certificated by opening the certificate management snap-in (certmgr.msc) and making sure that our certificate (issued for our company) is in the corresponding stores.
Tip. When you check the certificate store with the Sigcheck utility, this certificate will be displayed as untrusted, because it is not on the listed in the list of Microsoft root certificates (this list needs to be updated periodically).
Installation of the Driver Signed with the Self-signed Certificate Try to install the driver we have signed again using the command: Pnputil –i –a C:\DriverCert\xg20\xg20gr.inf
Now you won’t see the warning about the missing digital signature of the driver. Successfully installed the driver on a device on the system. Driver package added successfully.
The following warning appears in Windows 7 x64: Would you like to install this device software? In Windows 10 x64 1803, this pop- up window doesn’t appear. By clicking «Install», you install the driver in the system.
If for some reason the driver is not installed, the detailed driver installation log is contained in the file C:\Windows\inf\setupapi.dev.log. This log file allows you to get more information about the driver installation errors. In most cases, there is a “Driver package failed signature validation” error – most likely this means that the driver certificate is not added to the trusted certificates store.
If the driver installation was successful, the setupapi.dev.log file should contain the following lines: >>> [Device Install (DiInstallDriver) C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr .inf] >>> Section start 2018/07/22 23:32:57.015 cmd: Pnputil -i -a c:\DriverCert\xg\xg20gr.inf ndv: Flags: 0x00000000 ndv: INF path: C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr .inf inf: {SetupCopyOEMInf: C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr .inf} 13:23:37.046 inf: Copy style: 0x00000000 inf: Driver Store Path: C:\WINDOWS\System32\DriverStore\FileRepository\xg20gr.inf_amd64_c5955181214aa12b\xg20gr .inf inf: Published Inf Path: C:\WINDOWS\INF\oem23.inf inf: {SetupCopyOEMInf exit (0x00000000)} 13:23:37.077 <<< Section end 2018/07/22 13:23:37.155 <<< [Exit status: SUCCESS]
As you can see, to install the self-signed driver we did not even have to disable the digital s ignature verification of the drivers with the bcdedit.exe commands: bcdedit.exe /set loadoptions DISABLE_INTEGRITY_CHECKS bcdedit.exe /set testsigning ON