Zum Inhalt

47-Tage-Zertifikate sind im Anmarsch. Sind Sie bereit?

Jetzt handeln →

So signieren Sie ClickOnce-Manifeste mit Visual Studio

ClickOnce und unterschreiben

Beim Herunterladen eines Programms, Skripts oder Makros erscheint während der Installation oder Ausführung ein Popup-Fenster mit der Frage „Möchten Sie dies wirklich ausführen?“ oder „Möchten Sie, dass das nächste Programm diesen Computer beeinflusst?“. In diesem Popup wird Code Signing verwendet. Code Signing-Tools sind von entscheidender Bedeutung, da sie zwischen legitimer Software und bösartigem bzw. betrügerischem Code unterscheiden.

Signieren von ClickOnce-Manifesten in Visual Studio (kurzgefasst): Importieren Sie Ihr Codesignaturzertifikat in den persönlichen Zertifikatspeicher (bei HSM-gestütztem Schlüssel über ein KSP-Tool). Aktivieren Sie anschließend im Veröffentlichungsassistenten im Schritt „Manifeste signieren“ die Option „ClickOnce-Manifeste signieren“ und wählen Sie das importierte Zertifikat aus. Visual Studio signiert die .application- und .manifest-Dateien beim Veröffentlichen automatisch.

Wichtige Erkenntnisse

  • Visual Studio benötigt das Zertifikat im Windows-Zertifikatspeicher (Persönlich/Mein), nicht nur auf einem HSM. Ein KSP-basiertes Importtool stellt diese Verbindung her, sodass der private Schlüssel auf der Hardware verbleibt, Visual Studio aber weiterhin per Fingerabdruck darauf zugreifen kann.
  • Die Signierung erfolgt automatisch im Rahmen des Veröffentlichungsprozesses; es gibt keinen separaten manuellen Signierbefehl, sobald der Assistent konfiguriert ist. Dies bedeutet auch, dass die Automatisierung für CI/CD die Steuerung der gleichen Einstellungen über MSBuild-Parameter anstelle der GUI erfordert.

Umgebungsmatrix

KomponenteAnforderung
IDEVisual Studio (2019/2022) mit dem für den Projekttyp verfügbaren ClickOnce-Veröffentlichungsworkflow
Projekttyp.NET Framework oder .NET-Desktop-App mit Unterstützung für ClickOnce-Bereitstellung
ZertifikatssichtbarkeitMuss in den Windows-Zertifikatspeicher (Persönlich) importiert werden, nicht nur in einem HSM gespeichert.
HSM-BrückenwerkzeugEin KSP-Dienstprogramm (Key Storage Provider), z. B. ECGetCert.exe, um den HSM-gestützten Schlüssel im Windows-Zertifikatspeicher bereitzustellen.
ZertifikatsreferenzSHA-1-Fingerabdruck, der mit certutil verwendet wird, um den Speichereintrag beim KSP zu reparieren/zu registrieren.

Die Codesignierung ist ein Verfahren, das die Legitimität des Autors sowie die Originalität und Authentizität digitaler Informationen, insbesondere von Softwarecode, überprüft. Sie stellt außerdem sicher, dass es sich nicht um Schadcode handelt. Darüber hinaus garantiert sie, dass diese Informationen nach der digitalen Signatur nicht verändert, verfälscht oder gelöscht wurden.

 Ihre in Visual Studio mit Visual Basics und Visual C# entwickelten Projekte können mit ClickOnce veröffentlicht und aktualisiert werden. ClickOnce ist eine Microsoft-Technologie zum Bereitstellen und Aktualisieren von Windows-Desktopanwendungen über das Internet. Entwickler können damit ihre Anwendungen auf einem Webserver oder einer Netzwerkdateifreigabe veröffentlichen und sie Benutzern per Mausklick zur Verfügung stellen, ohne dass ein komplexer Installations- oder Konfigurationsprozess erforderlich ist.

Beim Veröffentlichen Ihres Projekts mit ClickOnce können Sie ClickOnce-Manifeste mit einem Zertifikat signieren. Dies trägt zum Nachweis der Legitimität Ihrer Anwendung bei und wird als Codesignierung bezeichnet . Die Codesignierung mit ClickOnce bietet verschiedene Sicherheitsfunktionen, die sicherstellen, dass die Anwendung und ihre Updates von einer vertrauenswürdigen Quelle heruntergeladen werden und Benutzer vor potenziellen Sicherheitsbedrohungen geschützt sind. Sie fügt Ihrer Anwendung eine zusätzliche Sicherheitsebene hinzu und kann das Vertrauen der Benutzer stärken.

Wenn Sie Ihr Projekt mit ClickOnce ohne Codesign veröffentlichen, wird bei der Ausführung einer solchen Anwendung durch den Benutzer häufig ein Dialogfeld mit einer Sicherheitswarnung angezeigt.

ClickOnce ohne Codesigning

Wenn Sie ClickOnce-Manifeste mit einem Codesignaturzertifikat signieren, werden jedoch keine derartigen Warnungen angezeigt.

Encryption Consulting bietet mit „ CodeSign Secure “ eine Lösung für die Code-Signatur, die eine manipulationssichere Speicherung der Schlüssel sowie vollständige Transparenz und Kontrolle über alle Code-Signatur-Aktivitäten ermöglicht. Die privaten Schlüssel des Code-Signatur-Zertifikats können in einem HSM gespeichert werden , um die Risiken gestohlener, beschädigter oder missbrauchter Schlüssel zu eliminieren.

Diese Lösung bietet ein Tool und ein Zertifikat zum Signieren von ClickOnce-Manifesten. Sie müssen das Tool installieren und konfigurieren und die folgenden Schritte ausführen, um fortzufahren.

Enterprise Code-Signing-Lösung

Holen Sie sich mit unserer Code-Signing-Lösung eine Lösung für alle Ihre kryptografischen Software-Code-Signing-Anforderungen.

  1. Installieren und konfigurieren Sie das Tool (SigningKSP)
  2. Rufen Sie über die Eingabeaufforderung das Verzeichnis auf, in dem sich ECGetCert.exe befindet.

    evcodesigning
  3. Führen Sie den Befehl aus: ECGetCert.exe evcodesigning. Dabei ist evcodesigning der Zertifikatsname, den wir für den Codesigning-Zweck verwenden.

    Dieser Befehl speichert die Datei evcodesigning.pem (Zertifikatsname.pem) im selben Verzeichnis

    Konfigurieren Sie das Tool (SigningKSP)
  4. Öffnen Sie certmgr.msc und navigieren Sie zu „Persönlich“ -> „Zertifikate“. Wenn kein Zertifikatsordner vorhanden ist, klicken Sie mit der rechten Maustaste auf „Persönlich“ -> „Alle Aufgaben“ -> „Importieren“.

    Zertifikate
  5. Es öffnet sich ein Zertifikatsimport-Assistent. Klicken Sie auf „Weiter“. Der Speicherort ist hier standardmäßig der aktuelle Benutzer.

    Zertifikatimport-Assistent
  6. Suchen Sie auf der nächsten Seite nach dem Zertifikat. Es sollte im selben Verzeichnis wie EGGetCert.exe gespeichert sein. Wählen Sie dort evcodesigning.pem (Zertifikatsname.pem) aus. Falls die Datei nicht angezeigt wird, wählen Sie unten alle Dateien anstelle des X.509-Zertifikats aus. Klicken Sie anschließend auf Weiter.

    EGGetCert
    X.509-Zertifikat
  7. Stellen Sie auf der nächsten Seite sicher, dass „Alle Zertifikate im folgenden Speicher ablegen“ ausgewählt ist. Unter „Zertifikatspeicher“ ist „Persönlich“ eingestellt. Klicken Sie auf „Weiter“ und dann auf „Fertig“. Ein Dialogfeld mit der Meldung „Der Import war erfolgreich“ wird angezeigt.

    Zertifikatspeicher
    Zertifikatsimport
  8. Sobald der Zertifikatsimport abgeschlossen ist, benötigen Sie den Fingerabdruckwert Ihres Zertifikats. Klicken Sie dazu auf Persönlich -> Zertifikate -> und dann auf das importierte Zertifikat. Navigieren Sie zu „Details“ und scrollen Sie nach unten zum Fingerabdruck. Sie können den Wert kopieren.

    Zertifikatdetails

    Kehren Sie zur Eingabeaufforderung zurück. Führen Sie den folgenden Befehl aus. Stellen Sie sicher, dass Sie den Fingerabdruck Ihres Zertifikats in Ihren Befehl einfügen.

    certutil -f -repairstore -csp „Anbieter von Schlüsselspeichern für Verschlüsselungsberatung“ -user „Mein“ 79656a9ce126fd0d1bb33f4dc73dba308f58b3ac

    Schlüsselspeicheranbieter
    ClickOnce-Veröffentlichung
  9. Navigieren Sie nach Ausführung des Befehls zu dem Projekt in Visual Studio, das Sie mit ClickOnce veröffentlichen möchten.

  10. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt und navigieren Sie zu „Veröffentlichen“. Klicken Sie darauf.

    ClickOnce-Veröffentlichung
  11. Es öffnet sich ein neues Dialogfeld. Wählen Sie ClickOnce aus und klicken Sie auf Weiter.

    ClickOnce Publizieren Sie noch heute
  12. Wählen Sie auf der nächsten Seite einen Veröffentlichungsort aus oder belassen Sie die Standardeinstellung „bin\publish“ und klicken Sie auf „Weiter“.

    verlassen Sie den Standardbehälter
  13. Sie können den Installationsort nach Ihren Wünschen auswählen oder die Standardeinstellung beibehalten. Klicken Sie auf Weiter.

    Installationsort
  14. Wählen Sie im nächsten Reiter Ihre gewünschten Einstellungen aus und klicken Sie auf Weiter

    VS-Einstellungen
  15. Aktivieren Sie unter „Manifeste signieren“ das Kontrollkästchen „ClickOnce-Manifeste signieren“ und klicken Sie auf „Zertifikat aus dem Store auswählen“.

    Signieren Sie die ClickOnce-Manifeste

    Es öffnet sich ein Dialogfenster mit einem Zertifikat, das zunächst importiert wurde. Klicken Sie auf OK, um fortzufahren.

    ein Zertifikat öffnen

    Sie können jetzt die Zertifikatsdetails in Sign Manifests sehen

    Zertifikatdetails
  16. Klicken Sie auf „Weiter“, um Ihre Konfiguration auszuwählen, und klicken Sie auf „Fertig“.

  17. Sie sehen den Fortschritt der Profilerstellung und ein grünes Häkchen, wenn dies erfolgreich war.

    Profilerstellung veröffentlichen
  18. Sie können das erstellte Veröffentlichungsprofil sehen.

    ClickOnce-Manifeste mit Visual Studio

Wir haben ClickOnce-Manifeste erfolgreich mit Visual Studio signiert. Klicken Sie auf „Veröffentlichen“, um Ihr Projekt zu veröffentlichen.

Überprüfen der Signatur

Überprüfen Sie nach der Veröffentlichung, ob die Signatur wirksam ist, bevor Sie die Anwendung verteilen: Klicken Sie im Windows Explorer mit der rechten Maustaste auf die veröffentlichte .application-Datei, öffnen Sie die Eigenschaften und prüfen Sie die Registerkarte „Digitale Signaturen“. Dort sollte Ihr Zertifikat mit gültigem Status aufgeführt sein. Alternativ können Sie dies über die Befehlszeile tun. mage.exe -Verify yourapp.application (Mage.exe wird mit dem Windows SDK ausgeliefert) prüft die Manifestsignatur und meldet Erfolg oder den jeweiligen Validierungsfehler.

Häufige Fehler

FehlerWahrscheinliche UrsacheFixieren
Im Zertifikatsauswahldialog von Visual Studio wird kein Zertifikat angezeigt.Das Zertifikat wurde entweder nicht in den persönlichen Zertifikatsspeicher importiert oder fälschlicherweise dem lokalen Rechner anstatt dem Zertifikat des aktuellen Benutzers zugewiesen.Importieren Sie die Zertifikate erneut über certmgr.msc und bestätigen Sie dabei „Persönlich“ als Zertifikatspeicherort und „Aktueller Benutzer“ als Speicherort.
certutil -repairstore schlägt fehl oder meldet, dass der Fingerabdruck nicht gefunden wurde.Falscher Fingerabdruck kopiert oder zusätzliche Leerzeichen/versteckte Zeichen aus der Zertifikatsdetailansicht eingefügtSollte der Fehler weiterhin bestehen, kopieren Sie den Fingerabdruck direkt von der Registerkarte „Details“ des Zertifikats und geben Sie ihn erneut ein, anstatt ihn einzufügen.
Die Veröffentlichung war erfolgreich, aber das Manifest wird als nicht signiert angezeigt.Das Kontrollkästchen „ClickOnce-Manifeste signieren“ war deaktiviert, oder die Zertifikatsauswahl wurde auf einer späteren Seite des Assistenten aufgehoben.Öffnen Sie die Veröffentlichungseigenschaften erneut und vergewissern Sie sich, dass das Kontrollkästchen „Manifeste signieren“ und das Zertifikat noch aktiviert sind, bevor Sie erneut veröffentlichen.

CI/CD-Nutzung und -Bereinigung

Die Einstellungen des Veröffentlichungsassistenten werden in der .pubxml-Datei des Projekts gespeichert, sodass eine CI/CD-Pipeline dasselbe Signierungsverhalten nicht-interaktiv durch Aufruf steuern kann. msbuild mit dem entsprechenden /p:PublishProfile und Manifestsignierungs-MSBuild-Eigenschaften (SignManifests, ManifestCertificateThumbprintAnstatt sich durch die grafische Benutzeroberfläche zu klicken, benötigt der Build-Agent weiterhin das Zertifikat, das in seinem eigenen Zertifikatsspeicher über denselben oben beschriebenen KSP-Brückenschritt sichtbar ist; es gibt keine Möglichkeit, MSBuild ohne diese Zwischenregistrierung direkt auf ein HSM zu verweisen.

Zur Bereinigung: Sobald ein Build-Agent die Signierfunktion nicht mehr benötigt, sollte das Zertifikat aus seinem persönlichen Speicher entfernt und die KSP-Bindung abgemeldet werden, anstatt eine signierfähige Identität auf einem Rechner zu belassen, der sie nicht mehr benötigt.

Häufig gestellte Fragen

Kann ich die Manifestsignierung mit ClickOnce automatisieren, ohne Visual Studio zu öffnen?

Ja. Lauf. msbuild gegen das Veröffentlichungsprofil des Projekts mit den festgelegten Manifestsignierungseigenschaften (SignManifests, ManifestCertificateThumbprint), muss das Zertifikat zunächst im Zertifikatsspeicher des Build-Agenten sichtbar sein.

Wie kann ich überprüfen, ob eine veröffentlichte ClickOnce-App tatsächlich signiert ist?

Überprüfen Sie die Registerkarte „Digitale Signaturen“ der .application-Datei im Windows Explorer oder führen Sie den Befehl aus. mage.exe -Verify dagegen von der Kommandozeile aus.

Verlässt der private Schlüssel während dieses Prozesses jemals das HSM?

Nein, vorausgesetzt, der KSP ist korrekt eingerichtet. Visual Studio referenziert das Zertifikat über den Fingerabdruck mithilfe des Key Storage Providers; die Operation mit dem privaten Schlüssel findet innerhalb des HSM statt, nicht auf dem Signaturrechner.

Fazit

Mit der digitalen Signatur und anderen Sicherheitsfunktionen ermöglicht das Signieren von ClickOnce-Manifesten Entwicklern, das Vertrauen der Benutzer in eine Anwendung zu bestimmen. Dies kann die Wahrscheinlichkeit verringern, dass schädliche Software auf dem Computer eines Benutzers ausgeführt wird. Angesichts der rasanten Zunahme von Viren und Malware in Online-Anwendungen sind solche Maßnahmen zur Schadensvermeidung unerlässlich. Vorsicht ist besser als Nachsicht.

Zusammenfassend lässt sich sagen, dass die Integration von Codesignaturen in die Softwaresicherheit unerlässlich ist, um Software vor Malware-Angriffen und Manipulationen zu schützen. Code Sign Secure von Encryption Consulting bietet zahlreiche Vorteile, darunter die nahtlose Integration in Entwicklungs-Workflows, robuste Authentifizierung und Verschlüsselung sowie individuell anpassbare Preisoptionen. Weitere Informationen zur Nutzung von Code Sign Secure finden Sie unter www.encryptionconsulting.com/code-signing-solution/ oder kontaktieren Sie uns unter [email protected]