Files
aza/AzA march 2026 - Kopie (18)/SIGNING_READINESS.md
2026-04-22 22:33:46 +02:00

6.4 KiB
Raw Blame History

AZA Desktop — Signing Readiness

Warum Code Signing?

Windows Smart App Control (ab Windows 11 22H2) blockiert unbekannte und unsignierte Anwendungen automatisch. Auch ohne Smart App Control zeigt Windows SmartScreen bei unsignierten Downloads Warnungen, die Kunden verunsichern.

Ziel: Alle Kundenauslieferungen von AZA Desktop werden mit einem gültigen Code-Signing-Zertifikat signiert, um Blockaden und Warnungen zu vermeiden.


Artefakte, die signiert werden müssen

Priorität 1 — Kritisch (blockiert Smart App Control)

Artefakt Pfad (nach Build) Warum
Haupt-EXE dist\aza_desktop\aza_desktop.exe Wird direkt ausgeführt, primäres Ziel von Smart App Control
Installer dist\installer\aza_desktop_setup.exe Erste Datei die der Kunde herunterlädt und startet

Priorität 2 — Empfohlen (verhindert DLL-Warnungen)

Artefakt Pfad (nach Build) Warum
DLLs in _internal dist\aza_desktop\_internal\*.dll Werden zur Laufzeit geladen; einige Sicherheits-Tools prüfen auch geladene DLLs
PYDs in _internal dist\aza_desktop\_internal\*.pyd Python-Extensions (sind technisch DLLs)

Nicht signieren

  • Daten-Dateien (.json, .sqlite, .txt, .env, .png, .ico)
  • Python-Bytecode (.pyc)
  • Konfigurationsdateien

Signing-Reihenfolge

Die Reihenfolge ist wichtig, da der Installer die bereits signierten Dateien einpackt:

1.  build_exe.ps1          → aza_desktop.exe + _internal/
2.  sign_release.ps1       → DLLs/PYDs signieren, dann EXE signieren
3.  build_installer.ps1    → Installer aus signierten Dateien bauen
4.  sign_release.ps1       → Installer signieren (oder im selben Lauf)
5.  build_release_artifacts.ps1  → SHA256-Hashes aktualisieren
6.  build_publish_bundle.ps1     → Publish-Bundle erstellen

In der aktuellen Pipeline (build_and_test_release.ps1) ist der Signing-Schritt bereits als optionaler Schritt zwischen Installer-Build und Smoke-Test eingefügt. Er wird nur ausgeführt, wenn ein Zertifikat konfiguriert ist.


Zertifikat beschaffen

Option A: Klassisches EV Code-Signing-Zertifikat (empfohlen für KMU)

  • Anbieter: DigiCert, Sectigo, GlobalSign
  • Typ: EV Code Signing (Extended Validation)
  • Vorteile:
    • Sofortige SmartScreen-Reputation (kein Reputation-Aufbau nötig)
    • Höchstes Vertrauen bei Smart App Control
  • Lieferform: Hardware-Token (USB) oder Cloud-HSM
  • Kosten: ca. CHF 400600 / Jahr
  • Validierung: Firma muss im Handelsregister eingetragen sein

Option B: Azure Trusted Signing (Microsoft)

  • Dienst: Azure Trusted Signing (ehemals Azure Code Signing)
  • Vorteile:
    • Direkte Microsoft-Reputation
    • Kein Hardware-Token nötig
    • CI/CD-Integration via Azure CLI
  • Voraussetzungen:
    • Azure-Konto
    • Identitätsvalidierung über Microsoft
  • Kosten: ab ca. USD 10 / Monat (Basic-Tier)

Empfehlung

Für AZA MedWork empfehle ich Option A (EV Code Signing), weil:

  • Sofortige SmartScreen-Reputation ohne Aufbauphase
  • Funktioniert unabhängig von Cloud-Diensten
  • Breite Akzeptanz bei allen Windows-Versionen

Umgebungsvariablen für sign_release.ps1

Variable Beschreibung Pflicht
AZA_SIGN_CERT_THUMBPRINT SHA-1 Thumbprint des Zertifikats im Windows Certificate Store Eins von beiden
AZA_SIGN_PFX_PATH Pfad zur .pfx-Datei Eins von beiden
AZA_SIGN_PFX_PASSWORD Passwort der .pfx-Datei Optional
AZA_SIGN_TIMESTAMP_URL Timestamp-Server (Standard: http://timestamp.digicert.com) Optional
AZA_SIGNTOOL_PATH Pfad zu signtool.exe (Standard: automatische Suche) Optional

Wichtig: Keine Zertifikate oder Passwörter ins Repository committen!


Konsistente Publisher-Identität

Für optimale SmartScreen-/Smart-App-Control-Reputation:

  • Immer denselben Publisher-Namen verwenden
  • Immer dasselbe Zertifikat für alle Releases verwenden
  • Der Publisher-Name im Inno-Setup-Installer (AppPublisher) muss mit dem Zertifikats-Subject übereinstimmen
  • Nach Festlegung den Publisher-Namen nicht mehr ändern (Reputationsverlust)

Aktuelle Namensformen im Projekt (Stand 2026-03-23)

Namensform Rolle Signing-relevant
AZA MedWork Firma / Publisher JA
AZA Desktop Produktname Nein
AZA Medical AI Assistant Interner Projektname / Marketing Nein

Aktueller Wert in installer\aza_installer.iss: AppPublisher = "AZA MedWork"

Vor Zertifikatskauf prüfen

  1. Wie lautet der offizielle Firmenname im Handelsregister? (z.B. "AZA MedWork", "AZA MedWork GmbH", "MedWork GmbH")
  2. EV-Zertifikats-Anbieter validiert gegen den HR-Eintrag
  3. Subject/CN/O im Zertifikat muss EXAKT zum HR-Namen passen
  4. AppPublisher in aza_installer.iss muss EXAKT zum Zertifikat passen
  5. Falls HR-Name von "AZA MedWork" abweicht, folgende Stellen gemeinsam anpassen:
    • installer/aza_installer.issMyAppPublisher
    • legal/privacy_policy.md
    • legal/ai_consent.md
    • deploy/WOOCOMMERCE_PRODUCT.md (Absendername)
    • deploy/WORDPRESS_GOLIVE.md (Absendername)
    • apps/diktat/diktat_app.py (Docstring)
    • aza_consent.py (Docstring)

Nicht anpassen (nicht signing-relevant)

  • project_status.json → "AZA Medical AI Assistant" (interner Projektname)
  • billing/invoice_template.json → "AZA Medical AI Assistant License" (Rechnungsposition)
  • web/index.html, web/download.html → Marketing-Footer

Checkliste vor erstem signierten Release

  • EV Code-Signing-Zertifikat beschafft
  • signtool.exe installiert (Windows SDK)
  • Umgebungsvariablen gesetzt (AZA_SIGN_CERT_THUMBPRINT oder PFX)
  • sign_release.ps1 -DryRun erfolgreich durchlaufen
  • sign_release.ps1 erfolgreich durchlaufen (echter Signing-Lauf)
  • Signatur mit Get-AuthenticodeSignature verifiziert
  • build_release_artifacts.ps1 erneut ausgeführt (Hashes aktualisiert)
  • Installer auf sauberem Windows-PC getestet (Smart App Control aktiv)
  • Publisher-Name im Zertifikat stimmt mit Inno-Setup AppPublisher überein

Dateien in diesem Projekt (Signing-bezogen)

Datei Zweck
sign_release.ps1 Signing-Skript (signiert EXE, DLLs, Installer)
build_and_test_release.ps1 Release-Pipeline (Signing-Schritt integriert)
build_release_artifacts.ps1 Artefakt-Report (enthält jetzt Signatur-Status)
SIGNING_READINESS.md Diese Dokumentation