Compartilhar via


Teste com assinatura

A partir do Windows Vista, as versões baseadas em x64 do Windows exigiam que todos os softwares executados no modo kernel, incluindo drivers, fossem assinados digitalmente para serem carregados. Inicialmente, você pode usar a opção F8 (em cada inicialização, antes que o Windows seja carregado) para desabilitar temporariamente a imposição de tempo de carregamento de exigir uma assinatura válida em seu driver. Mas isso se tornará tedioso após os primeiros usos. Você pode anexar um depurador de kernel ao computador de teste que desabilitará as mesmas verificações de imposição de tempo de carregamento depois de usar os comandos BCDEdit corretos. No entanto, eventualmente, será necessário testar a assinatura do driver durante o desenvolvimento e, por fim, liberar a assinatura do driver antes de publicá-lo para os usuários.

Instalar um driver não assinado durante o desenvolvimento e teste

Trecho de Instalando um driver não assinado durante o desenvolvimento e o teste:

Por padrão, as versões de 64 bits do Windows Vista e versões posteriores do Windows carregarão um driver de modo kernel somente se o kernel puder verificar a assinatura do driver. No entanto, esse comportamento padrão pode ser desabilitado durante o desenvolvimento inicial do driver e para testes não automatizados. Os desenvolvedores podem usar um dos mecanismos a seguir para desabilitar temporariamente a imposição de tempo de carregamento de uma assinatura de driver válida. No entanto, para automatizar totalmente o teste de um driver instalado por Plug and Play (PnP), o arquivo de catálogo do driver deve ser assinado. A assinatura do driver é necessária porque o Windows Vista e versões posteriores do Windows exibem uma caixa de diálogo de assinatura de driver para drivers não assinados que exigem que um administrador do sistema autorize a instalação do driver, potencialmente impedindo que qualquer usuário sem os privilégios necessários instale o driver e use o dispositivo. Esse comportamento de instalação do driver PnP não pode ser desabilitado no Windows Vista e versões posteriores do Windows.

Use a opção de inicialização avançada F8

O Windows Vista e versões posteriores do Windows dão suporte à Opção de Inicialização Avançada F8 -- "Desabilitar Imposição de Assinatura de Driver" -- que desabilita a imposição de assinatura de tempo de carregamento para um driver de modo kernel apenas para a sessão atual do sistema. Essa configuração não persiste entre as reinicializações do sistema.

A tela de opção de inicialização a seguir aparecerá durante a reinicialização, fornecendo a opção de desabilitar a imposição de assinatura do driver. Esta disposição permitirá a instalação de um driver não assinado para fins de teste.

Captura de tela mostrando as opções avançadas de inicialização do F8.

Anexar um depurador de kernel para desabilitar a verificação de assinatura

Anexar um depurador de kernel ativo a um computador de desenvolvimento ou teste desabilita a imposição de assinatura de tempo de carregamento para drivers no modo kernel. Para usar essa configuração de depuração, anexe um computador de depuração a um computador de desenvolvimento ou teste e habilite a depuração de kernel no computador de desenvolvimento ou teste executando o seguinte comando:

bcdedit -debug on

Para usar o BCDEdit, o usuário deve ser membro do grupo Administradores no sistema e executar o comando em um prompt de comando com privilégios elevados. Para abrir uma janela elevada do Prompt de Comando, crie um atalho na área de trabalho para Cmd.exe, selecione e segure (ou clique com o botão direito do mouse) no atalho e selecione Executar como administrador.

No entanto, lembre-se de que também há situações em que um desenvolvedor pode ter que anexar um depurador de kernel, mas também precisa manter a imposição de assinatura de tempo de carregamento. Consulte o Apêndice 1: Impondo a verificação de assinatura no modo kernel no modo de depuração do kernel para saber como fazer isso.

Testar assinar um pacote de driver

Em vez de usar os dois métodos acima para ignorar os requisitos de imposição de assinatura de driver, a melhor abordagem é testar a assinatura de um pacote de driver. A assinatura de teste e a instalação do driver podem ser feitas no computador de desenvolvimento, mas talvez você queira ter dois computadores, um para desenvolvimento e assinatura e outro para teste.

Trecho de Como testar a assinatura de um pacote de driver:

Computador de assinatura

Este é o computador usado para testar a assinatura de um pacote de driver para Windows Vista e versões posteriores do Windows. Este computador deve estar executando o Windows XP SP2 ou versões posteriores do Windows. Para usar as ferramentas de assinatura de driver, esse computador deve ter o Windows Vista e versões posteriores do WDK (Windows Driver Kit) instalados. Este também pode ser o computador de desenvolvimento.

Computador de teste

Este é o computador usado para instalar e testar o pacote de driver assinado por teste. Este computador deve estar executando o Windows Vista ou versões posteriores do Windows.

Procedimento de assinatura de teste

Os pacotes de driver conterão o binário do driver, o arquivo INF, o arquivo CAT e todos os outros arquivos necessários. Um pacote de driver pode conter subdiretórios como x86, AMD64, IA64, se o driver for criado para mais de um tipo de processador de destino. Execute estas etapas usando seu computador de desenvolvimento/assinatura.

O procedimento a seguir descreve as etapas para testar a assinatura de um pacote de driver:

  1. Crie o driver para o destino. Se você estiver criando um driver para Windows 8.0 ou Windows 8.1, use o Visual Studio 2012 ou o Visual Studio 2013 com o WDK correspondente instalado, por exemplo, Windows 8.0 ou 8.1 WDK, respectivamente.

    Todas as ferramentas de comando descritas abaixo devem ser usadas na janela de comando de ferramenta/build correspondente Visual Studio 2012 ou Visual Studio 2013.

    Observação

    As ferramentas de comando do Visual Studio estão localizadas no diretório de instalação, C:\Arquivos de Programas (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts

    Qualquer um dos cinco atalhos para prompt de comando terá comandos makecert.exe, inf2cat.exe, signtool.exe, certmgr.exe, etc.

    Você pode escolher o mais geral, "Prompt de comando do desenvolvedor para VS2013". Os atalhos podem ser fixados na barra de tarefas para facilitar o acesso.

    Observação

    Observe que, com o Visual Studio, em vez da abordagem da ferramenta de comando de assinatura de driver, você também pode usar o ambiente de desenvolvimento do Visual Studio 2013 (também conhecido como IDE) para assinar um pacote de driver. Consulte o Apêndice 2: Assinando drivers com o Visual Studio para obter mais informações.

  2. Crie uma pasta de pacote de driver e copie os arquivos de driver, mantendo todos os subdiretórios necessários, por exemplo, C:\DriverTestPackage.

  3. Crie um arquivo inf para o pacote de driver. Teste o arquivo inf usando a ferramenta InfVerif do WDK no arquivo inf para que nenhum erro seja relatado.

  4. Trecho de Criação de certificados de teste:

    O exemplo de linha de comando a seguir usa MakeCert para concluir as seguintes tarefas:

    • Crie um certificado de teste autoassinado chamado Contoso.com(Test). Esse certificado usa o mesmo nome para o nome da entidade e a autoridade de certificação (CA).

    • Coloque uma cópia do certificado em um arquivo de saída chamado ContosoTest.cer.

    • Coloque uma cópia do certificado em um repositório de certificados chamado PrivateCertStore. Colocar o certificado de teste no PrivateCertStore o mantém separado de outros certificados que podem estar no sistema.

    Use o seguinte comando MakeCert para criar o certificado Contoso.com(Test ):

    makecert -r -pe -ss PrivateCertStore -n CN=Contoso.com(Test) ContosoTest.cer
    

    Onde:

    • A opção -r cria um certificado autoassinado com o mesmo emissor e nome de assunto.

    • A opção -pe especifica que a chave privada associada ao certificado pode ser exportada.

    • A opção -ss especifica o nome do repositório de certificados que contém o certificado de teste (PrivateCertStore).

    • A opção -n CN= especifica o nome do certificado, Contoso.com(Test). Esse nome é usado com a ferramenta SignTool para identificar o certificado.

    • ContosoTest.cer é o nome do arquivo que contém uma cópia do certificado de teste, Contoso.com(Test). O arquivo de certificado é usado para adicionar o certificado ao repositório de certificados de Autoridades de Certificação Raiz Confiáveis e ao repositório de certificados de Editores Confiáveis.

    Trecho da exibição de certificados de teste:

    Depois que o certificado é criado e uma cópia é colocada no repositório de certificados, o snap-in Certificados do MMC (Console de Gerenciamento Microsoft) pode ser usado para exibi-lo. Faça o seguinte para exibir um certificado por meio do snap-in Certificados MMC:

    1. Para iniciar o snap-in Certificados, execute Certmgr.msc.

    2. No painel esquerdo do snap-in Certificados, expanda a pasta de armazenamento de certificados PrivateCertStore e clique duas vezes em Certificados.

    A captura de tela a seguir mostra o modo de exibição do snap-in Certificados da pasta do repositório de certificados PrivateCertStore .

    Captura de tela do repositório de certificados mostrando o certificado de teste.

    Para exibir os detalhes sobre o certificado Contoso.com(Teste), clique duas vezes no certificado no painel direito. A captura de tela a seguir mostra os detalhes sobre o certificado.

    Captura de tela da janela do certificado exibindo informações gerais sobre o certificado contoso.com (teste).

    Observe que a caixa de diálogo Certificado afirma: "Este certificado raiz da CA não é confiável. Para habilitar a confiança, instale este certificado no repositório de Autoridades de Certificação Raiz Confiáveis." Esse é o comportamento esperado. O certificado não pode ser verificado porque o Windows não confia na autoridade emissora, "Contoso.com(Test)" por padrão.

  5. Crie um arquivo de catálogo (extensão .cat). Use a ferramenta inf2cat conforme mostrado abaixo para criar o arquivo de catálogo. Observe que nenhum espaço é permitido para os switches, /driver:<no space><full path>, /os: :<no space><os1 name>,:<no space><os2 name>.

    inf2cat  /v  /driver:C:\DriverTestPackage  /os:7_64,7_x86 ,XP_X86
    

    Isso cria um arquivo de catálogo com o nome fornecido no arquivo .inf do driver. Sistemas operacionais separados por vírgulas adicionais podem ser adicionados seletivamente ou todos, conforme mostrado abaixo, sem espaços.

    /os:2000,XP_X86,XP_X64,Server2003_X64,Vista_X64,Vista_X86,7_x86,7_64,Server2008_x86,Server2008_x64,Sever2008_IA64,Server2008R2_x86,Server2008R2_x64,Server2008R2_IA64,8_x86,8_x64, 8_ARM, Server8_x64
    

    O inf2cat atualizado do novo WDK 8.1 tem valores de opção /os de 6_3_X86, 6_3_X64, 6_3_ARM e SERVER_6_3_X64.

    Exemplo de arquivo INF para a seção Versão.

    [Version]
    Signature="$WINDOWS NT$"
    Class=TOASTER
    ClassGuid={B85B7C50-6A01-11d2-B841-00C04FAD5171}
    Provider=%ToastRUs%
    DriverVer=09/21/2006,6.0.5736.1
    CatalogFile.NTx86 = tostx86.cat
    CatalogFile.NTIA64 = tostia64.cat
    CatalogFile.NTAMD64 = tstamd64.cat
    PnpLockdown = 1
    

    A opção /driver (ou /drv) especifica o diretório que contém um ou mais arquivos INF. Dentro desse diretório, os arquivos de catálogo são criados para os arquivos INF que contêm uma ou mais diretivas CatalogFile. O nome do arquivo de catálogo não está restrito ao nome 8.3.

    O Inf2Cat cria o arquivo de catálogo tstamd64.cat se o argumento de linha de comando /os:7_X64 for usado. Da mesma forma, a ferramenta cria o arquivo de catálogo toastx86.cat se a opção /os:XP_X86, for usada, da mesma forma para Server2008R2_IA64. Caso apenas um arquivo de catálogo seja desejado, apenas uma entrada no arquivo INF, conforme mostrado abaixo, será suficiente.

    CatalogFile.NT = toaster.cat
    

    Ou,

    CatalogFile = toaster.cat
    

    Se a data no arquivo INF não for maior que a data de lançamento do sistema operacional, o erro a seguir será relatado pela ferramenta inf2cat se o parâmetro /os for para Windows 7 e a data definida no arquivo INF for uma data anterior.

    Signability test failed.
    Errors:
    22.9.7: DriverVer set to incorrect date (must be postdated to 4/21/2009 for newest OS) in \toaster.inf
    

    A ferramenta inf2cat é muito rigorosa na verificação de cada pasta e subpasta sobre a presença de cada arquivo que possui uma entrada no arquivo INF. Haverá mensagens de erro significativas nessas entradas ausentes.

    O arquivo cat pode ser aberto no explorer clicando duas vezes ou clicando com o botão direito do mouse no arquivo e selecionando Abrir. A guia Segurança mostrará algumas entradas com valores GUID. A seleção de um valor GUID exibirá detalhes, incluindo os arquivos de driver do pacote de driver e os sistemas operacionais adicionados, conforme mostrado abaixo:

    OSAttr  2:5.1,6.1
    

    O número 5.1 é o número da versão do sistema operacional XP e 6.1 do sistema operacional Windows 7.0.

    É aconselhável que o arquivo cat seja verificado para verificar a inclusão dos arquivos de driver e dos sistemas operacionais selecionados. A qualquer momento, se algum arquivo de driver for adicionado ou removido, o arquivo INF tiver sido modificado, o arquivo cat deverá ser recriado e assinado novamente. Qualquer omissão aqui causará erros de instalação relatados no arquivo de log de instalação (setupapi.dev.log para Vista e superior ou setupapi.log arquivo para XP).

  6. Trecho de Test-Signing o arquivo de catálogo de um pacote de driver:

    A linha de comando a seguir mostra como executar o SignTool para fazer o seguinte:

    Para testar a assinatura do arquivo de catálogo tstamd64.cat , execute a seguinte linha de comando:

    signtool sign /v /s PrivateCertStore /n Contoso.com(Test) /t http://timestamp.digicert.com tstamd64.cat
    

    Onde:

    • O comando sign configura o SignTool para assinar o arquivo de catálogo especificado, tstamd64.cat.

    • A opção /v habilita operações detalhadas, nas quais o SignTool exibe mensagens de aviso e execução bem-sucedidas.

    • A opção /s especifica o nome do repositório de certificados (PrivateCertStore) que contém o certificado de teste.

    • A opção /n especifica o nome do certificado (Contoso.com(Test)) instalado no repositório de certificados especificado.

    • A opção /t especifica a URL do TSA (http://timestamp.digicert.com) que marcará a data e hora da assinatura digital.

    Importante

    A inclusão de um carimbo de data/hora fornece as informações necessárias para a revogação da chave caso a chave privada de assinatura de código do signatário seja comprometida.

  • tstamd64.cat especifica o nome do arquivo de catálogo, que será assinado digitalmente.

tstamd64.cat especifica o nome do arquivo de catálogo, que será assinado digitalmente. Você pode abrir o arquivo cat conforme descrito anteriormente

  1. Trecho modificado de Test-Signing a um driver por meio de uma assinatura inserida:

    • Nas versões de 64 bits do Windows Vista e versões posteriores do Windows, os requisitos de assinatura de código do modo kernel afirmam que um driver de inicialização deve ter uma assinatura inserida. Isso é necessário independentemente de o pacote de driver do driver ter um arquivo de catálogo assinado digitalmente.

    Abaixo está o comando para inserir um arquivo binário de driver de modo kernel.

    signtool sign  /v  /s  PrivateCertStore  /n  Contoso.com(Test)  /t http://timestamp.digicert.com   amd64\toaster.sys
    

    amd64\toaster.sys especifica o nome do arquivo binário no modo kernel que será assinado por incorporação.

    No diretório de instalação do WDK 7.1, o exemplo de torradeira está localizado no diretório src\general\toaster\toastpkg\toastcd\. Os exemplos do WDK do Windows 8 ou 8.1 devem ser baixados do site de download da Microsoft. Os exemplos não vêm com o Windows 8 ou 8.1 Windows Driver Kit.

    O arquivo de catálogo quando aberto clicando duas vezes no arquivo no Windows Explorer, você verá a captura de tela a seguir. Observe que "Exibir assinatura" agora está destacado.

    Captura de tela mostrando informações gerais do arquivo do catálogo de segurança.

    Se você selecionar "Exibir assinatura", verá a captura de tela abaixo fornecendo a próxima opção de visualização de "Exibir certificado", que dará a opção de "Instalar certificado" na própria caixa de diálogo. Abaixo, estamos fornecendo a opção de linha de comando preferencial de instalar o certificado usando a ferramenta certmgr.exe.

    Captura de tela mostrando informações gerais sobre os detalhes da assinatura digital.

    Captura de tela mostrando informações gerais sobre o certificado.

O driver agora pode ser testado no computador de assinatura ou no computador de teste. Se você estiver usando o computador de teste, copie o pacote de driver para o computador mantendo a estrutura de arquivos intacta. A ferramenta certmgr.exe também deve ser copiada para o computador de teste. Ao usar um computador de teste, copie o pacote de driver Toastpkg assinado por teste para a pasta temporária c:\tower.

O procedimento a seguir descreve as etapas a serem usadas em qualquer computador para testar o driver:

  1. Em uma janela de comando com privilégios elevados, execute o seguinte comando:

    bcdedit  /set  testsigning  on
    

    Reinicialize o computador.

  2. Trechos selecionados de Usando o CertMgr para instalar certificados de teste em um computador de teste:

    Copie o arquivo de certificado (.cer), que foi usado para testar a assinatura de drivers, para o computador de teste. Você pode copiar o arquivo de certificado para qualquer diretório no computador de teste.

    O seguinte comando CertMgr adiciona o certificado no arquivo de certificado CertificateFileName.cer ao repositório de certificados de Autoridades de Certificação Raiz Confiáveis no computador de teste:

    CertMgr.exe /add CertificateFileName.cer /s /r localMachine root
    

    O seguinte comando CertMgr adiciona o certificado no arquivo de certificado CertificateFileName.cer ao repositório de certificados de Editores Confiáveis no computador de teste:

    CertMgr.exe /add CertificateFileName.cer /s /r localMachine trustedpublisher
    

    Onde (trechos de CertMgr):

    /add Nome_do_Certificado

    Adiciona o certificado no arquivo de certificado especificado ao repositório de certificados.

    /s

    Especifica que o repositório de certificados é um repositório do sistema.

    /r Localização do Registro

    Especifica que o local do Registro do repositório do sistema está em HKEY_LOCAL_MACHINE.

    CertificateStore

    Especifica o repositório de certificados, trustedpublisher, da mesma forma para "localMachine root".

    Reinicialize o computador. Agora você pode executar Certmgr.msc e verificar se o ContosoTest.cer está visível nos dois locais acima. Se não estiver visível, outra maneira de instalar o certificado é abri-lo e instalá-lo nos dois nós acima e verificar novamente.

  3. Verifique a assinatura do arquivo cat e do arquivo sys. Abra uma janela de comando com privilégios elevados e, supondo que o signtool.exe esteja disponível no computador, vá para o diretório do pacote de driver em que os arquivos cat, inf e sys estão localizados. Execute os comandos a seguir no diretório apropriado.

    Verificando a assinatura SPC de um arquivo de catálogo:

    signtool  verify  /v  /kp  /c  tstamd64.cat  toaster.inf
    

    Para verificar se há sinal de incorporação, execute o comando a seguir.

    Verificando a assinatura de um arquivo de driver assinado por versão:

    signtool  verify  /v  /kp  toaster.sys
    

    Os dois comandos acima gerarão um erro, pois ele é assinado por teste e o certificado não era um certificado confiável.

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

    Os dois comandos de verificação acima serão muito úteis na assinatura de versão que será discutida mais tarde.

    O driver agora está pronto para ser instalado e testado no computador de teste. É sempre aconselhável que a chave do Registro a seguir seja definida corretamente para coletar logs detalhados em setupapi.dev.log arquivo (para Windows Vista e sistemas operacionais posteriores) durante o processo de instalação.

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\Loglevel=0x4800FFFF

    No arquivo %SystemRoot%\inf, renomeie o arquivo setupapi.dev.log antes de instalar o driver. Após a instalação, um novo arquivo de setupapi.dev.log de log será criado, contendo informações valiosas encontradas durante a instalação.

    Depois que o driver for instalado com êxito, ele poderá ser testado no computador de desenvolvimento ou no computador de teste.

Instalando, desinstalando e carregando o pacote de driver assinado por teste

Depois que o sistema for reinicializado na Etapa 2, o pacote de driver assinado por teste poderá ser instalado e carregado. Há duas maneiras de instalar um pacote de driver:

  1. Usando a ferramenta Pnputil (pnputil.exe) fornecida pelo sistema operacional.

  2. Usando a ferramenta Devcon (devcon.exe), que é uma ferramenta de linha de comando do WDK para instalar drivers, mas não redistribuível. O código de exemplo da ferramenta Devcon é fornecido no WDK. Para redistribuir, você pode implementar sua própria ferramenta Devcon a partir do código de exemplo e pode redistribuir sua versão da ferramenta.

Para instalar e desinstalar o pacote de driver usando PnpUtil

Instalando o pacote de driver:

  1. Abra uma janela de comando com privilégios elevados e defina o diretório padrão como c:\toaster.

  2. Execute um dos seguintes comandos:

    • Para preparar apenas o pacote de driver: pnputil /add-driver toaster.inf

    • Para preparar o driver e instalá-lo em dispositivos existentes: pnputil /add-driver toaster.inf /install

Desinstalando o pacote de driver:

  1. Abra uma janela de comando com privilégios elevados.

  2. Identifique o nome do INF OEM que corresponde ao pacote de driver que você deseja remover da lista retornada por pnputil /enum-drivers

  3. Execute: pnputil /delete-driver \<OEM INF name> /uninstall

Para instalar e desinstalar o pacote de driver usando o DevCon

Instalando o pacote de driver:

  1. Abra uma janela de comando com privilégios elevados e defina o diretório padrão como c:\toaster.

  2. Devcon.exe é fornecido no diretório de ferramentas do WDK a versão x86, a versão amd64 e a versão ia64. Copie a versão relevante para o diretório c:\toaster e execute o comando a seguir.

    devcon.exe update <inf> <hwid>
    

    É aconselhável usar aspas em torno <de hwid>. Para a amostra da torradeira, será:

    devcon.exe update c:\toaster\toaster.inf "{b85b7c50-6a01-11d2-b841-00c04fad5171}\MsToaster"
    

Desinstalando o pacote de driver:

Um pacote de driver não deve ser removido do sistema enquanto um dispositivo ainda o estiver usando. Se o dispositivo precisar ser removido para remover o pacote de driver, um dispositivo poderá ser removido usando a ferramenta Devcon usando a opção "remover". devcon.exe /? mostra todos os interruptores para esta ferramenta. Para obter informações específicas sobre como usar uma opção, "ajuda" deve ser adicionada conforme mostrado abaixo para a opção "remover".

devcon.exe help remove

Após a remoção do dispositivo, para remover o driver, são necessários dois comandos. Use o primeiro comando com a opção "dp_enum" para encontrar o nome do arquivo inf do driver correspondente ao pacote de driver instalado no computador.

devcon dp_enum

Esse comando mostrará a lista de todos os arquivos oemNnn.inf correspondentes a um pacote de driver, em que Nnn é um número decimal com as informações de classe e Fornecer informações conforme mostrado abaixo.

oem39.inf
    Provider: Intel
    Class: Network adapters
oem4.inf
    Provider: Dell
    Class: ControlVault Device

Para remover o pacote de driver correspondente do DriverStore, use o próximo comando mostrado abaixo para o driver Intel "Network Adapters":

devcon.exe dp_delete oem39.inf

Verifique se o driver assinado por teste está funcionando corretamente

Para verificar se o Toastpkg está funcionando corretamente:

  1. Inicie o Gerenciador de Dispositivos

  2. Selecione Torradeira na lista de dispositivos. Para obter um exemplo, veja a captura de tela abaixo.

    Captura de tela mostrando a torradeira no Gerenciador de dispositivos.

  3. Para abrir a caixa de diálogo Propriedades do driver, clique duas vezes em Torradeira de Exemplo de Pacote Toaster e selecione Propriedades

  4. Para confirmar se o Toaster está funcionando corretamente, na guia Geral, marque a caixa Status do dispositivo

O Gerenciador de dispositivos pode ser usado para desinstalar o dispositivo e o driver da caixa de diálogo Propriedades.

Como solucionar problemas de drivers assinados por teste

Consulte Solucionando problemas de instalação de assinatura de driver se encontrar alguma dificuldade com esses procedimentos.