Eine mit Luftlücken versehene .NET-Anwendung mit Code-Signierung wird nicht installiert / ausgeführt

8

Wir haben kürzlich unsere Anwendungen aktualisiert, um die SHA-256-Codesignierung mit einem neuen Zertifikat zu nutzen. Die Assemblies sind stark mit der Option Sign the assembly in Visual Studio 2015 signiert. Das Postbuildereignis in Visual Studio führt zwei signtool.exe -Prozesse zum Signieren sowohl in SHA-256 als auch für das veraltete SHA-1-Zertifikat aus:

%Vor%

Schließlich verwenden wir Advanced Installer als Installationspaket, und auch das ist auf der Seite Digital Signature mit dem Code signiert, wobei das Zertifikat und der Zeitstempel gemäß der .exe-Signatur verwendet werden.

Die endgültige Setup-Datei wird installiert und läuft auf mit dem Internet verbundenen Windows-Computern wie erwartet. Sie können sehen, dass das Zertifikat zugewiesen und gültig ist, sowie die Zertifikatskette über die Eigenschaften von setup.exe und Laufzeit bei der Installation. Darüber hinaus erkennt Windows die Anwendung von einer vertrauenswürdigen Quelle und zeigt die entsprechenden verifizierten Herausgeberdetails an.

Unser Kundenstamm besteht größtenteils aus weltweit 100 Unternehmen, und die meisten Bereitstellungen werden in Netzwerken mit Luftlücken stattfinden. In einer unserer ersten aktualisierten Bereitstellungen in dieser Umgebung konnte das Zertifikat nicht überprüft werden, sodass das Installationsprogramm nicht abgeschlossen werden konnte.

Dies war sinnvoll, weil die Windows-Computer (2012 Server R2) vom Internet isoliert waren und aufgrund von Unternehmensrichtlinien Turn off Automatic Root Certificates auf Enabled festgelegt waren. Diese Einstellung befindet sich im Ordner Computer Configuration -> Administrative Templates -> System -> Internet Communication Management -> Internet Communication Settings der MMC-Anwendung (Sie müssen das Zertifikat-Plugin installiert haben).

Beim Testen auf unserem lokalen Testbett wurden selbst Computer, die nicht mit dem Internet verbunden waren, die Zertifikate vom Setup-Dienstprogramm installieren, wenn die oben genannte Registrierungseinstellung die Standardeinstellung war ( Disabled ). Wir könnten das Problem replizieren, indem wir die Richtlinieneinstellung so ändern, dass sie mit den Kunden übereinstimmt ( Enabled ).

Um das Problem zu umgehen, haben wir das Stammzertifikat der Zertifizierungsstelle manuell heruntergeladen und als vertrauenswürdiges Stammzertifikat installiert. Die Installation wird dann normal fortgesetzt.

Als diese Problemumgehung dem Kunden vorgestellt wurde, ist die Installation trotz des Zertifikats der Zertifizierungsstellen, das in den vertrauenswürdigen Stammzertifikaten der Maschine vorhanden ist, weiterhin fehlgeschlagen.

Das Kundendienstteam der Zertifizierungsstelle hat empfohlen, dass wir den Zeitstempel vom Signierprozess löschen, damit die Installation fortgesetzt werden kann - und das ist die einzige Hilfe, die sie anbieten (das ist eine andere Geschichte). Dies bedeutet jedoch, dass nach Ablauf des Codesignaturzertifikats die Anwendung entweder nicht mehr ausgeführt wird oder nicht bestätigte Publisher-Fehler angezeigt werden.

Ich bin nicht ganz davon überzeugt, dass dies das Problem auch beheben wird, da das Zertifikat beim lokalen Testen immer noch vom Installationsprogramm gefunden wurde und die Installation fortgesetzt werden konnte, wenn das Stammzertifikat der Zertifizierungsstelle manuell installiert wurde.

Was ich nicht tun kann, ist die Replikation der Kundenumgebung, um genau das Problem zu reproduzieren (was nicht hilft). Es ist fast so, als würde Windows den Speicher vertrauenswürdiger Stammzertifikate des lokalen Computers umgehen. Ich gehe davon aus, dass, wenn dies möglich ist, Windows so gegen einen zentralen Stammzertifikatsspeicher verifizieren könnte.

Ist das sogar unter Windows möglich? Wenn ja, wo finde ich entweder eine Dokumentation oder wie wird dies gemacht?

Fehle ich etwas in den Code-Signing-Schritten oder in meinem Verständnis von dem, was auf dem Installationscomputer geschehen soll, während es das Zertifikat überprüft?

Ich weiß nicht, was ich tun soll, damit dieser Installer funktioniert. Was ich mir nicht leisten kann, ist, immer wieder zum Kunden zu gehen, damit sie unsere Installationen testen können. Zunächst einmal ist es wirklich nicht der richtige Prozess, um zu debuggen, da der liefernde Anbieter nicht das Problem des Kunden zu lösen ist, aber noch wichtiger, ich brauche unser Team, um zu verstehen, was das verursacht und wie es richtig zu beheben ist.

>

Idealerweise tue ich nicht, was ich den Zeitstempel fallen lassen soll, wenn ich nicht muss, denn das wird neue Probleme verursachen, wenn die Software nicht aktualisiert wird, bevor das Zertifikat abläuft.

Alle und alle helfen sehr geschätzt.

    
Hooligancat 22.05.2017, 22:02
quelle

1 Antwort

2

Ich denke, ein Grund, warum ein Zertifikat in einer Air-gapped-Umgebung nicht validiert werden kann, kann sein, dass der Widerruf nicht verifiziert werden kann. Wie Sie vielleicht wissen, kann ein Zertifikat widerrufen werden, und es gibt zwei verschiedene Protokolle, die überprüft werden müssen, ob es sich um CRL und OCSP handelt. Beide erfordern Netzwerkzugriff auf die Zertifizierungsstelle, die das Zertifikat ausgestellt hat.

Ob die Widerrufungen tatsächlich überprüft werden, richtet sich nach den Richtlinien hier , und dies kann Ihre Probleme verursachen.

    
Gabor Lengyel 27.05.2017, 21:45
quelle