Drivers de Windows com assinatura de atestado

Este artigo descreve como assinar um driver usando a assinatura de atestado.

Observação

Os drivers certificados destinados ao público de varejo não são publicados no Windows Update. O suporte continua para drivers assinados por atestado quando você estiver testando cenários com as opções CoDev ou Test Registry Key/Surface SSRK.

Pré-requisitos

  • Leia e entenda os requisitos para drivers assinados por atestado para cenários de teste.

  • Registre-se para o Programa de Desenvolvedor de Hardware. Se você não estiver registrado, siga as etapas em Register para o Microsoft Windows Hardware Developer Program.

  • Você deve ter um certificado de assinatura de código com validação estendida (EV). Verifique se a organização já tem um certificado de assinatura de código.

    • Se você tiver um certificado existente, disponibilize o certificado.

    • Se sua organização não tiver um certificado, compre um certificado EV.

  • Baixe e instale o Windows Assessment and Deployment Kit (Windows ADK) seguindo o processo descrito em Download e instale o Windows ADK.

  • (Opcional) Baixe a amostra de driver Echo usada neste artigo, que está disponível no GitHub.

Criar o arquivo CAB

O procedimento a seguir cria um envio de arquivos CAB usando o exemplo de driver Echo para ilustrar as etapas.

Um envio de arquivo CAB típico deve conter os seguintes componentes:

  • O próprio driver (por exemplo, Echo.sys).

  • O arquivo INF (.inf) do driver usado pelo painel para facilitar o processo de assinatura.

  • O arquivo de símbolo usado para depurar informações, como Echo.pdb. O arquivo .pdb é necessário para Microsoft ferramentas automatizadas de análise de falhas.

  • Arquivos de catálogo (.cat) são necessários e usados somente para verificação da empresa. Microsoft regenera arquivos de catálogo e substitui todos os arquivos de catálogo enviados anteriormente.

Observação

Cada pasta de driver em seu arquivo CAB deve dar suporte ao mesmo conjunto de arquiteturas. Por exemplo, eles devem dar suporte a x86, x64 ou todos eles devem dar suporte a x86 e x64.

Não use caminhos de compartilhamento de arquivos UNC quando você referenciar seus locais de driver (\server\share). Você deve usar uma letra de unidade mapeada para que o CAB seja válido.

Para criar o arquivo CAB, siga estas etapas:

  1. Reúna os binários a serem assinados em um único diretório. Este exemplo usa a C:\Echo pasta.

  2. Abra uma janela do Prompt de Comando com privilégios de Administrador.

  3. Insira o MakeCab /? comando para ver as opções de comando:

    C:\Echo> MakeCab /?
    Cabinet Maker - Lossless Data Compression Tool
    
    MAKECAB [/V[n]] [/D var=value ...] [/L dir] source [destination]
    MAKECAB [/V[n]] [/D var=value ...] /F directive_file [...]
    
    source         File to compress.
    destination    File name to give compressed file. If omitted, the
                   last character of the source file name is replaced
                   with an underscore (_) and used as the destination.
    /F directives  A file with MakeCAB directives (may be repeated). Refer to
                   Microsoft Cabinet SDK for information on directive_file.
    /D var=value   Defines variable with specified value.
    /L dir         Location to place destination (default is current directory).
    /V[n]          Verbosity level (1..3).
    
  4. Prepare um arquivo de entrada DDF (estrutura de descrição do dispositivo de arquivo CAB). Para o driver Echo neste exemplo, a entrada pode ser semelhante ao seguinte código:

    ;*** Echo.ddf example
    ;
    .OPTION EXPLICIT     ; Generate errors
    .Set CabinetFileCountThreshold=0
    .Set FolderFileCountThreshold=0
    .Set FolderSizeThreshold=0
    .Set MaxCabinetSize=0
    .Set MaxDiskFileCount=0
    .Set MaxDiskSize=0
    .Set CompressionType=MSZIP
    .Set Cabinet=on
    .Set Compress=on
    ;Specify file name for new cab file
    .Set CabinetNameTemplate=Echo.cab
    ; Specify the subdirectory for the files.
    ; Your cab file should not have files at the root level,
    ; and each driver package must be in a separate subfolder.
    .Set DestinationDir=Echo
    ;Specify files to be included in cab file
    C:\Echo\Echo.Inf
    C:\Echo\Echo.Sys
    
  5. Insira o seguinte comando para criar o arquivo CAB:

    C:\Echo> MakeCab /f "C:\Echo\Echo.ddf
    

    A saída do MakeCab comando deve exibir o número de arquivos no arquivo CAB criado. Nesse caso, deve haver dois arquivos.

    C:\Echo> MakeCab /f Echo.ddf
    Cabinet Maker - Lossless Data Compression Tool
    
    17,682 bytes in 2 files
    Total files:              2
    Bytes before:        17,682
    Bytes after:          7,374
    After/Before:            41.70% compression
    Time:                     0.20 seconds ( 0 hr  0 min  0.20 sec)
    Throughput:              86.77 Kb/second
    
  6. Localize o arquivo CAB no Disk1 subdiretório. Você pode selecionar o arquivo CAB no Explorador de Arquivos para verificar se ele contém os arquivos esperados.

Assinar o arquivo CAB com seu certificado EV

A próxima etapa é assinar o arquivo CAB com seu certificado EV.

Use o processo recomendado pelo provedor de certificados EV. Por exemplo, para assinar o arquivo CAB com um carimbo de data/hora SHA256, insira o seguinte comando:

C:\Echo> SignTool sign /s MY /n "Company Name" /fd sha256 /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /td sha256 /v "C:\Echo\Disk1\Echo.cab"

Importante

Lembre-se de usar as práticas recomendadas do setor para gerenciar a segurança do processo de assinatura de código EV.

Enviar o arquivo CAB assinado por EV no Partner Center

Depois de assinar o arquivo CAB, você estará pronto para enviar o arquivo no Partner Center:

  1. Acesse o painel de hardware do Partner Center e entre com suas credenciais.

  2. Selecione Enviar novo hardware.

    Captura de tela da lista de envios de hardware.

  3. Na seção Propriedade de pacotes de assinatura insira um nome de produto para o envio do driver. Use esse nome para pesquisar e organizar seus envios de driver.

    Observação

    O nome fica visível quando você compartilha seu driver com outra empresa.

  4. Deixe as duas opções de assinatura de teste desmarcadas (não selecionadas).

  5. Para a opção Assinaturas Solicitadas , selecione as assinaturas a serem incluídas no pacote de driver:

    Captura de tela que mostra as opções para enviar o driver Echo para assinatura.

  6. Selecione Enviar na parte inferior da página.

  7. Após a conclusão do processo de assinatura, baixe o driver assinado do painel de hardware.

Validar se o driver está assinado corretamente

Certifique-se de que o seu driver está assinado corretamente seguindo estas etapas:

  1. Depois de baixar o arquivo enviado, extraia o arquivo de driver.

  2. Abra uma janela do Prompt de Comando com privilégios de Administrador.

  3. Insira o seguinte comando para verificar se o driver está assinado conforme o esperado:

    C:\Echo> SignTool verify Echo.Sys
    
  4. Para listar outras informações e fazer com que o SignTool verifique todas as assinaturas em um arquivo com várias assinaturas, insira o seguinte comando:

     C:\Echo> SignTool verify /pa /ph /v /d Echo.Sys
    
  5. Para confirmar os EKUs (Usos avançados de chave) do driver, conclua as seguintes etapas:

    1. Abra Windows Explorer e localize o arquivo binário. Clique com o botão direito do mouse no arquivo e selecione Propriedades.

    2. Na guia Assinaturas Digitais , selecione o item listado na lista de assinaturas.

    3. Selecione Detalhes e selecione Exibir Certificado.

    4. Na guia Detalhes , selecione Uso Avançado de Chave.

O driver usa o seguinte processo quando ele renuncia ao driver:

  1. Acrescente uma assinatura SHA-2 com embutido da Microsoft.

  2. Se os binários de driver estiverem assinados e inseridos pelo cliente com seus próprios certificados, substitua as assinaturas.

  3. Crie e assine um novo arquivo de catálogo com um certificado sha-2 Microsoft. O catálogo substitui qualquer catálogo existente fornecido pelo cliente.

Teste seu driver no Windows

Instale o driver de exemplo e teste-o no Windows:

  1. Abra uma janela do Prompt de Comando com privilégios de Administrador.

  2. Vá para a pasta do pacote do driver e insira o comando a seguir.

    C:\Echo> devcon install echo.inf root\ECHO
    
  3. Confirme se o processo de instalação do driver não mostra a seguinte mensagem de erro: "O Windows não pode verificar o publicador deste software de driver".

Criar uma submissão com vários drivers

Envie vários drivers ao mesmo tempo seguindo estas etapas:

  1. Crie um subdiretório para cada driver.

    Diagrama que mostra um exemplo de estrutura de diretório para assinatura de driver.

  2. Prepare um arquivo de entrada CAB no formato DDF que referencie os subdiretórios. Para este exemplo, a entrada pode ser semelhante ao seguinte código:

    ;*** Submission.ddf multiple driver example
    ;
    .OPTION EXPLICIT     ; Generate errors
    .Set CabinetFileCountThreshold=0
    .Set FolderFileCountThreshold=0
    .Set FolderSizeThreshold=0
    .Set MaxCabinetSize=0
    .Set MaxDiskFileCount=0
    .Set MaxDiskSize=0
    .Set CompressionType=MSZIP
    .Set Cabinet=on
    .Set Compress=on
    ;Specify file name for new cab file
    .Set CabinetNameTemplate=Echo.cab
    ;Specify files to be included in cab file
    ; First Driver
    .Set DestinationDir=DriverPackage1
    C:\DriverFiles\DriverPackage1\Driver1.sys
    C:\DriverFiles\DriverPackage1\Driver1.inf
    ; Second driver
    .Set DestinationDir=DriverPackage2
    C:\DriverFiles\DriverPackage2\Driver2.sys
    C:\DriverFiles\DriverPackage2\Driver2.inf