Obtendo o Driver USB MSP430 assinado pela Microsoft


11

Estou desenvolvendo um produto que utiliza um microcontrolador MSP430 com um módulo USB embutido. Eu obtive um PID da Texas Instruments e usei suas ferramentas para gerar os descritores, além de um arquivo .inf para instalar o software do driver. O problema óbvio é que, devido à natureza personalizada desses arquivos, um pop-up é apresentado (no Windows 7) ao conectar o cabo USB que avisa o usuário que o driver não está assinado. Acredito que no Windows 8 e Windows 10 ele simplesmente o bloqueia e não indica isso para o usuário.

Como este é um produto completo que minha empresa planeja lançar, precisamos obter um certificado de driver (acredito na forma de um arquivo .cat?) Que podemos fornecer ao cliente para que ele possa instalar o dispositivo software de driver sem problemas.

Examinei bastante a documentação da Microsoft (mais notavelmente este documento ) tentando entender o que é necessário para obter a assinatura de um driver, mas infelizmente isso está em minha cabeça no momento.

Isto é o que eu acho que entendi até agora:

  • Preciso enviar meu driver (arquivo .inf?) Para uma autoridade de certificação autorizada pela Microsoft. Existem vários deles por aí, então eu precisaria encontrar um que assine drivers.
  • Depois de selecionar uma autoridade de certificação, geralmente precisarei pagar uma taxa anual (geralmente por 1, 2 ou 3 anos) por seu serviço. Todos os drivers que eu gerar durante esse período serão assinados permanentemente, mesmo após o término do serviço. Se eu quiser mudar o driver ou criar um novo depois que o serviço expirar, precisarei comprar o serviço por mais 1, 2 ou 3 anos.
  • Depois de pagar a taxa, a CA gerará um arquivo .cat, que é um certificado que garante que o driver que eu dei a eles não será alterado. Se isso acontecer, não corresponderá mais ao arquivo .cat e um erro será exibido durante a instalação

Isso está correto? Correndo o risco de parecer que estou buscando recomendações para CAs específicas (não sei, lembre-se), onde posso encontrar uma lista de CAs capazes de fazer essa certificação para mim? Melhor ainda seriam seus sites e / ou preços por diferentes períodos de serviço. Alguém aqui teve experiência direta na obtenção de um driver para um produto baseado em microcontrolador USB assinado por uma CA, que poderia me ajudar a entender e concluir o processo? Eu já postei nos fóruns do MSDN, mas parece bastante morto por lá - já se passaram dois dias e meu tópico tem apenas algumas visualizações.


O seu driver é uma coisa completa, que precisa executar o código no modo kernel ou é apenas um arquivo inf? Se for apenas um arquivo inf, quais drivers internos (arquivos .sys) são carregados?
Jack B

É aqui que eu falho, não sei muito sobre o funcionamento interno dos PCs e como os drivers funcionam. Meu dispositivo foi projetado com base em um MSP430 com um módulo USB embutido. Este dispositivo simplesmente tem uma interface CDC através da ligação USB, por isso tudo que ele faz é abrir uma porta virtual
DerStrom8

Como o design está agora, ele está em uma placa de desenvolvimento e, quando tento instalar o dispositivo usando o arquivo .inf, recebo o erro padrão do Windows 7: davidegrayson.com/signing/img/win7_unverified_publisher.png . Enquanto isso, para testar, acabei de usar os arquivos .inf e .cat fornecidos com um dos exemplos de CDC do pacote MSP430Ware, mas quando eu lançar este produto, não poderei mais fazer isso. Se não me engano, isso não executar código no modo kernal
DerStrom8

1
Em resumo: você pode assinar com um certificado de assinatura de código normal, com preço de cerca de £ 80 / ano em que eu olhei. Não é necessário todo o material de assinatura cruzada da Microsoft. Porém, no Windows 8.1 e versões anteriores, não é super confiável (não conseguimos passar pela EN61326), portanto, convém ter uma alternativa alinhada também. Se ninguém me bater, escreverei uma resposta depois do jantar.
Jack B

1
@AdamLawrence Voltei algumas horas depois e não percebi que precisava adicionar algo à sua resposta. Tão bem por mim.
Jack B

Respostas:


16

Não é tão ruim, na verdade. Já fiz isso algumas vezes no trabalho, escrevendo e assinando um INF / .CAT para um USB baseada em PIC24FJ64GB002 Microchip CDC-ACM-to-I 2 interface de C.

  • Estabeleça um relacionamento com uma autoridade de certificação. Você precisará fornecer algumas informações básicas que eles validarão. Se você optar pela Validação Estendida (EV), eles solicitarão muito mais, mas você não precisará ir tão longe. Thawte, Digicert e Comodo são alguns exemplos de CAs.

  • Adquira um certificado de assinatura de código Authenticode da CA. É isso que você precisa para assinar o arquivo .CAT associado ao seu arquivo .INF. Você não precisa de um certificado no modo kernel para este nível de assinatura.

  • Instale o certificado (escusado será dizer)

  • Faça o download da estrutura do Windows SDK e do Windows Driver Kit para obter as ferramentas da Microsoft necessárias (geração e assinatura de catálogo).

  • Empacote e assine os drivers:

    • Use inf2cat para gerar o arquivo de catálogo (.CAT) para o arquivo .INF
    • Use signtool para assinar o arquivo de catálogo

A partir deste ponto, você pode criar algum tipo de instalador de driver ou usar o dpinst no SDK para executar a automação básica da instalação.

EDIT: Notas de vários comentários abaixo:

  1. Criar um arquivo .INF para carregar o USBSER.SYS não está criando um driver no modo kernel - você está usando o USBSER.SYS (já incorporado, assinado e confiável), não está criando algo novo - e, como tal, não requer uma assinatura EV certificado e certificação WHQL. Um certificado Authenticode básico é tudo o que é necessário.
  2. A partir do Windows 10, você não precisa de um .INF assinado para dispositivos USBSER.SYS, pois o Windows seleciona automaticamente os dispositivos USB CDC-ACM (Class_02). Eles também reescreveram o driver do zero e agora funcionam muito melhor (ele até lida com remoções e reinserções inesperadas de dispositivos sem travar a porta COM virtual, o que é uma grande vantagem!). Dito isto, você ainda pode usar a abordagem do driver assinado se realmente quiser - o driver assinado ainda 'funcionará'. Ainda existem muitas máquinas Win 8.1 / 8/7 e mais antigas por aí, portanto, ter um driver assinado ainda é algo importante para dispositivos USB CDC-ACM.

Expansão adicional em suas perguntas:

  • Você não envia nada para assinatura na CA - você compra o certificado de assinatura de código, instala-o em uma máquina e faz a validação .INF e a assinatura.
  • Você não precisa pagar uma taxa anual per se - no entanto, o certificado que você comprar terá um período de validade de 1, 2 ou 3 anos. Quando o certificado expirar, você precisará comprar um novo para poder continuar assinando - qualquer coisa assinada anteriormente permanecerá válida, mas você perde a capacidade de assinar novos itens.
  • O .CAT é um hash para o .INF - quaisquer alterações no .INF serão detectadas e o certificado não será mais válido, o que significa que o .INF se comportaria como um não assinado.


4
Esta é uma excelente resposta, muito útil mesmo. Você definitivamente faz parecer muito mais fácil do que eu esperava. Eu vou olhar para isso. Enquanto isso, vou aceitar essa resposta por causa das etapas claras e diretas fornecidas. Felicidades!
DerStrom8

2
@ poizan42 Este não é um driver de modo kernal. Este é um dispositivo USB CDC simples que abre apenas uma porta COM virtual. Nenhuma execução de código no modo kernal é executada.
DerStrom8

1
Só queria acompanhar. Essas etapas funcionaram perfeitamente com apenas uma ressalva: inf2cat.exe não vem com o Windows SDK, você também deve instalar o Windows Driver Kit (WDK): docs.microsoft.com/en-us/windows-hardware/drivers/ ... . Muito obrigado por sua ajuda, agora posso instalar meu software de driver sem nenhum aviso - ele mostra minha empresa como editora como esperado
DerStrom8

2
Resposta alterada. Obrigado por apontar o óbvio (que tem sido alguns anos desde que eu instalados os toolchains)
Adam Lawrence
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.