MSP430 USB-Treiber von Microsoft signieren lassen

11

Ich entwickle ein Produkt, das einen MSP430-Mikrocontroller mit einem eingebauten USB-Modul verwendet. Ich habe eine PID von Texas Instruments erhalten und deren Tools zum Generieren der Deskriptoren sowie eine INF-Datei zum Installieren der Treibersoftware verwendet. Das offensichtliche Problem ist, dass aufgrund des benutzerdefinierten Charakters dieser Dateien beim Einstecken des USB-Kabels ein Popup (unter Windows 7) angezeigt wird, das den Benutzer warnt, dass der Treiber nicht signiert ist. Ich glaube, unter Windows 8 und Windows 10 wird es einfach blockiert und dem Benutzer überhaupt nicht angezeigt.

Da es sich um ein Produkt mit vollem Funktionsumfang handelt, das von meinem Unternehmen herausgebracht werden soll, benötigen wir ein Treiberzertifikat (ich glaube in Form einer .cat-Datei?), Das wir dem Kunden zur Verfügung stellen können, damit er das Gerät installieren kann Treibersoftware ohne Problem.

Ich habe einiges in der Microsoft-Dokumentation durchgearbeitet (insbesondere in diesem Dokument ), um herauszufinden, was erforderlich ist, um einen Treiber zu signieren, aber leider ist dies im Moment über meinem Kopf.

Folgendes verstehe ich soweit:

  • Ich muss meinen Treiber (INF-Datei?) Bei einer von Microsoft autorisierten Zertifizierungsstelle (CA) einreichen. Es gibt eine Reihe von diesen da draußen, also müsste ich eine finden, die Treiber signiert.
  • Nach der Auswahl einer Zertifizierungsstelle muss ich in der Regel eine jährliche Gebühr zahlen (in der Regel für 1, 2 oder 3 Jahre). Alle Treiber, die ich während dieser Zeit generiere, werden auch nach Ablauf des Dienstes dauerhaft signiert. Wenn ich den Treiber ändern oder einen neuen Treiber erstellen möchte, nachdem der Dienst abgelaufen ist, muss ich den Dienst für weitere 1, 2 oder 3 Jahre kaufen.
  • Nach Zahlung der Gebühr erstellt die Zertifizierungsstelle eine CAT-Datei, die ein Zertifikat darstellt, das sicherstellt, dass der von mir angegebene Treiber nicht geändert wird. In diesem Fall stimmt die Datei nicht mehr mit der CAT-Datei überein, und während der Installation wird ein Fehler angezeigt

Ist das richtig? Wo finde ich eine Liste der Zertifizierungsstellen, die diese Zertifizierung für mich durchführen können, wenn ich das Risiko habe, nach Empfehlungen für bestimmte Zertifizierungsstellen zu suchen (ich denke nicht)? Noch besser wären deren Websites und / oder Preise für unterschiedliche Servicedauern. Hat jemand hier direkte Erfahrung damit, einen Treiber für ein USB-Mikrocontroller-basiertes Produkt zu bekommen, das von einer Zertifizierungsstelle signiert wurde? Ich habe bereits in den MSDN-Foren gepostet, aber es scheint dort ziemlich tot zu sein. Es sind zwei Tage vergangen, und mein Thread hat nur eine Handvoll Aufrufe.

DerStrom8
quelle
Handelt es sich bei Ihrem Treiber um eine Vollversion, die Code im Kernel-Modus ausführen muss, oder handelt es sich nur um eine inf-Datei? Wenn es sich nur um eine INF-Datei handelt, welche integrierten Treiber (.sys-Dateien) werden geladen?
Jack B
Hier scheitere ich, ich weiß nicht viel über die Funktionsweise von PCs und die Funktionsweise von Treibern. Mein Gerät ist für einen MSP430 mit integriertem USB-Modul ausgelegt. Dieses Gerät verfügt lediglich über eine CDC-Schnittstelle über die USB-Verbindung, sodass lediglich ein virtueller COM-Port geöffnet ist
DerStrom8
Da sich das Design jetzt befindet, befindet es sich tatsächlich auf einem Entwicklungsboard. Wenn ich versuche, das Gerät mithilfe der INF-Datei zu installieren, wird unter Windows 7 der Standardfehler angezeigt : davidegrayson.com/signing/img/win7_unverified_publisher.png . In der Zwischenzeit habe ich zum Testen nur die INF- und CAT-Dateien verwendet, die mit einem der CDC-Beispiele aus dem MSP430Ware-Paket geliefert wurden, aber wenn ich dieses Produkt veröffentliche, kann ich das nicht mehr. Wenn ich mich nicht irre, führt dies keinen Code im kernal-Modus aus
DerStrom8
1
Kurz gesagt: Sie können das mit einem normalen Code-Signierzertifikat unterschreiben, das ungefähr £ 80 / Jahr kostet. Sie brauchen nicht das gesamte Microsoft-Cross-Signing-Material. Aber unter Windows 8.1 und früheren Versionen ist es nicht besonders zuverlässig (wir konnten mit EN61326 nicht durchkommen). Vielleicht möchten Sie auch eine Alternative haben. Wenn mich niemand schlägt, schreibe ich nach dem Abendessen eine Antwort.
Jack B
1
@AdamLawrence Ich bin ein paar Stunden später zurückgekommen und habe nicht gesehen, dass ich Ihrer Antwort etwas hinzufügen muss. So gut von mir.
Jack B

Antworten:

16

Eigentlich ist es nicht so schlimm. Ich habe dies einige Male bei der Arbeit getan und eine .INF / .CAT-Datei für eine USB-CDC-ACM-zu-I 2 C-Schnittstelle auf PIC24FJ64GB002-Basis von Microchip geschrieben und signiert .

  • Stellen Sie eine Beziehung zu einer Zertifizierungsstelle her. Sie müssen ihnen einige grundlegende Informationen zur Verfügung stellen, die sie validieren. Wenn Sie sich für Extended Validation (EV) entscheiden, werden sie viel mehr verlangen, aber Sie sollten nicht so weit gehen müssen. Thawte, Digicert und Comodo sind einige Beispiele für Zertifizierungsstellen.

  • Erwerben Sie ein Authenticode-Codesignaturzertifikat von der Zertifizierungsstelle. Dies ist, was Sie benötigen, um die .CAT-Datei zu signieren, die Ihrer .INF-Datei zugeordnet ist. Für diese Signaturstufe benötigen Sie kein Kernelmodus-Zertifikat.

  • Installieren Sie das Zertifikat (versteht sich von selbst)

  • Laden Sie das Windows SDK-Framework und das Windows Driver Kit herunter , um die erforderlichen Microsoft-Tools (Katalogerstellung und -signierung) zu erhalten.

  • Packen und unterschreiben Sie die Treiber:

    • Verwenden Sie inf2cat , um die Katalogdatei (.CAT) für die .INF-Datei zu generieren
    • Verwenden Sie Signtool die Katalogdatei zu unterzeichnen

Ab diesem Zeitpunkt können Sie eine Art Treiberinstallationsprogramm erstellen oder dpinst aus dem SDK verwenden, um eine grundlegende Automatisierung der Installation durchzuführen .

BEARBEITEN: Notizen aus verschiedenen Kommentaren unten:

  1. Beim Erstellen einer INF-Datei zum Laden von USBSER.SYS wird kein Kernelmodustreiber erstellt. Sie verwenden USBSER.SYS (bereits integriert, signiert und vertrauenswürdig) und erstellen keine neue Datei. Daher ist keine EV-Signatur erforderlich Zertifikat und WHQL-Zertifizierung. Ein grundlegendes Authenticode-Zertifikat ist alles, was benötigt wird.
  2. Ab Windows 10 benötigen Sie für USBSER.SYS-Geräte überhaupt keine signierte INF-Datei, da Windows USB-CDC-ACM-Geräte (Class_02) automatisch automatisch erkennt. Sie haben auch den Treiber von Grund auf neu geschrieben und er funktioniert jetzt viel besser (er verarbeitet sogar unerwartete Geräteentfernungen und -wiederherstellungen, ohne den virtuellen COM-Port zu blockieren, was ein riesiges Plus ist!). Trotzdem können Sie den signierten Treiber-Ansatz verwenden, wenn Sie dies wirklich möchten - der signierte Treiber funktioniert weiterhin. Es gibt immer noch viele Win 8.1 / 8/7 und ältere Computer, daher ist es für USB-CDC-ACM-Geräte immer noch wichtig, einen signierten Treiber zu haben.

Weitere Erweiterung Ihrer Fragen:

  • Sie übermitteln nichts zum Signieren an die Zertifizierungsstelle - Sie erwerben das Codesignaturzertifikat, installieren es auf einem Computer und führen die INF-Validierung durch und signieren selbst.
  • Sie müssen per se keine Jahresgebühr zahlen - das von Ihnen gekaufte Zertifikat hat jedoch eine Gültigkeitsdauer von 1, 2 oder 3 Jahren. Wenn das Zertifikat abläuft, müssen Sie ein neues kaufen, um weiterhin signieren zu können - alles, was zuvor signiert wurde, bleibt gültig, Sie können jedoch keine neuen Dokumente mehr signieren.
  • Die .CAT-Datei ist ein Hash für die .INF-Datei. Alle Änderungen an der .INF-Datei werden erkannt und das Zertifikat ist nicht mehr gültig. Dies bedeutet, dass sich die .INF-Datei wie eine nicht signierte Datei verhält.
Adam Lawrence
quelle
4
Weitere Details: Adafruits Signieren von Windows-Treibern und -Executables .
CL.
4
Dies ist eine hervorragende Antwort, die in der Tat sehr hilfreich ist. Sie lassen es auf jeden Fall viel einfacher klingen, als ich erwartet hatte. Ich werde das untersuchen. In der Zwischenzeit werde ich diese Antwort aufgrund der klaren und unkomplizierten Schritte akzeptieren. Prost!
DerStrom8
2
@ poizan42 Dies ist kein Treiber für den kernal-Modus. Dies ist ein einfaches USB-CDC-Gerät, das nur einen virtuellen COM-Port öffnet. Es wird keine Kernelmodus-Codeausführung durchgeführt.
DerStrom8
1
Ich wollte nur nachfassen. Diese Schritte haben mit nur einer Einschränkung perfekt funktioniert: inf2cat.exe ist nicht im Windows SDK enthalten. Sie müssen auch das Windows Driver Kit (WDK) installieren: docs.microsoft.com/en-us/windows-hardware/drivers/ ... . Vielen Dank für Ihre Hilfe, ich bin jetzt in der Lage meine Treibersoftware ohne Warnungen zu installieren - es zeigt meine Firma als Herausgeber wie erwartet
DerStrom8
2
Antwort geändert. Vielen Dank für den Hinweis auf das Offensichtliche (es ist ein paar Jahre her, seit ich die Toolchains installiert habe)
Adam Lawrence