Code Signing Certificate • Aidex  • Impressum  • Datenschutz
Vorteile von Code Signing

Da Software hauptsächlich über das Internet ver­teilt wird, steht der Verwender vor einem grund­legen­den Problem: Wie kann er sicher sein, dass eine herunter­geladene Programm­datei tat­säch­lich vom an­gegebenen Her­steller stammt und auf dem Weg zu ihm nicht manipu­liert wurde?

Genau hier setzt Code Signing an. Wenn ein Ent­wick­ler seine Software mit einem Code Signing Certifi­cate signiert, erhält der Anwender beim Aus­führen der Datei eine ver­läss­liche Auskunft über zwei ent­scheiden­de Dinge: Erstens, wer die Soft­ware er­stellt und ver­öffent­licht hat, und zwei­tens, dass die Datei seit ihrer Signie­rung un­ver­ändert ge­blieben ist.

Der praktische Nutzen ist erheblich. Ohne Signierung zeigt Windows beim ersten Aus­führen einer aus dem Inter­net herunter­gelade­nen Datei einen deutli­chen Warn­hinweis: Der Heraus­geber sei un­bekannt, und die Soft­ware könnte den Computer ge­fährden. Für tech­nisch weniger versierte Anwen­der ist das oft ein un­über­wind­bares Hinder­nis. Mit einer gülti­gen Signa­tur hin­gegen er­scheint ent­weder gar keine Warnung oder ledig­lich ein dezen­ter Hinweis mit dem Namen des Heraus­gebers.

Besonders wichtig ist dabei der Schutz vor Manipula­tion auf dem Transport­weg. Würde ein Angreifer eine Web­site hacken und die dort ange­botene Programm­datei durch eine manipu­lierte Version er­set­zen, würde die Signatur­prüfung sofort fehl­schlagen. Die aus­getausch­te Datei hätte keine gültige Signatur des legiti­men Ent­wick­lers, da dafür der private Schlüssel des Ent­wick­lers benötigt würde - den der Angreifer nicht be­sitzt. Windows würde die Datei als ungültig signiert er­kennen und den Anwender warnen.

Man sollte jedoch verstehen, was Code Signing nicht leistet: Es garan­tiert nicht, dass eine Soft­ware frei von Schad­software ist. Auch ein Entwickler mit gültigem Zertifi­kat könnte theore­tisch bös­artige Software ver­öffent­lichen. Code Signing beant­wortet aus­schließ­lich die Fragen nach Herkunft und Un­versehrt­heit - nicht nach der Ver­trauens­würdig­keit des Inhalts. Es ist wie ein Ein­schreiben per Post: Man weiß, dass das Paket un­geöffnet und un­verändert an­gekommen ist und wer es ab­geschickt hat. Aber was sich darin be­findet, sagt das Ein­schreiben nicht.

Dennoch ist dieser Schutz im Alltag äußerst wert­voll. In einer Zeit, in der Schad­software häufig durch manipu­lierte Down­loads ver­brei­tet wird, gibt die Kombina­tion aus be­kanntem Heraus­geber und gülti­ger Signa­tur dem Anwender eine sinn­volle und ver­läss­liche Orien­tierung.

Wie ein Entwickler ein Zertifikat erwirbt

Der Weg zu einem Code Signing Certificate führt über so­genannte Certifi­cate Authori­ties, kurz CAs - also Zertifi­zierungs­stellen, die von Microsoft und Apple offiziell an­erkannt sind. Nur Zertifi­kate von diesen an­erkann­ten Stellen werden von Windows und macOS als ver­trauens­würdig akzep­tiert.

Grundsätzlich gibt es zwei Arten von Code Signing Certifi­cates: OV-Zertifi­kate (Organiza­tion Valida­tion) und EV-Zertifi­kate (Exten­ded Valida­tion). Bei OV-Zertifika­ten wird die Identi­tät des Antrag­stellers ge­prüft, jedoch weniger streng. Sie bauen das so­genann­te SmartScreen-Vertrauen bei Windows erst mit der Zeit auf - je öfter eine sig­nierte Soft­ware herunter­geladen und aus­geführt wird, ohne dass Probleme ge­meldet werden, desto mehr Vertrauen ge­winnt sie im SmartScreen-System. EV-Zertifi­kate hingegen ge­nießen soforti­ges volles Vertrauen, da die Identitäts­prüfung hier beson­ders gründ­lich ist.

Der Erwerbsprozess beginnt damit, dass der Ent­wick­ler einen Antrag bei einer CA stellt. Dabei muss er seine Identi­tät nach­weisen - bei Privat­personen bei­spiels­weise durch einen Personal­ausweis, bei Unterneh­men durch Handels­register­auszüge und weitere Doku­mente. Die CA prüft diese Angaben, was bei EV-Zertifi­katen mehrere Tage dauern kann.

Ein wichtiger Aspekt, der seit etwa 2023 zunehmend zur Pflicht wird: EV-Zertifi­kate dürfen nicht mehr als reine Datei aus­geliefert werden. Der private Schlüssel muss auf einem zertifi­zierten Hardware-Token ge­speichert sein - einem speziel­len USB-Stick, der als Hard­ware Security Module (HSM) fungiert. Die CA sendet diesen Token physisch per Post zu. Der Vorteil: Der private Schlüssel ver­lässt das Gerät tech­nisch nie, was ihn vor Dieb­stahl schützt. Nach­teilig ist, dass der Ent­wick­ler diesen Stick bei jedem Signier­vorgang an­ge­schlossen haben muss.

Als Alternative zu physischen Tokens haben sich Cloud-basierte Signing-Dienste etabliert. Anbieter wie DigiCert KeyLocker, SSL.com eSigner oder SignPath.io verwah­ren den privaten Schlüssel in einem ge­sicher­ten Cloud-HSM. Der Ent­wickler signiert seine Soft­ware über eine API oder ein Kommando­zeilen-Tool, ohne einen physi­schen Stick zu be­nöti­gen. Gerade für automa­ti­sierte Build-Prozesse ist das deut­lich prakti­scher.

Zu den bekanntesten CAs gehören DigiCert als Markt­führer, Sectigo als günsti­gere Alternati­ve, GlobalSign mit Fokus auf Unternehmens­kunden sowie Certum aus Polen, das oft als günstigs­te Option für Einzel­entwickler gilt. Die Preise liegen je nach Anbieter und Zertifikats­typ zwischen etwa 90 und über 600 Euro pro Jahr.

Die technischen Einzelheiten

Hinter Code Signing steckt ein elegantes krypto­graphi­sches Verfah­ren, das auf asymmetri­scher Ver­schlüsse­lung basiert. Das Grund­prinzip ist dabei dasselbe wie bei anderen Public-Key-Verfah­ren: Es gibt einen priva­ten Schlüssel, der geheim bleibt, und einen öffent­lichen Schlüssel, den jeder kennen darf.

Beim Signieren einer ausführbaren Datei läuft der Prozess ver­einfacht wie folgt ab: Zunächst wird ein krypto­graphi­scher Hash über den Inhalt der Datei be­rechnet. Ein Hash ist dabei eine Art digitale Quer­summe - eine Zeichen­kette fester Länge, die den gesam­ten Datei­inhalt repräsen­tiert. Ändert sich auch nur ein einzi­ges Byte der Datei, ändert sich der Hash voll­ständig. Heut­zutage wird dafür typischer­weise SHA-256 ver­wendet.

Dieser Hash wird anschließend mit dem privaten Schlüssel des Ent­wicklers ver­schlüsselt. Das Ergebnis - der ver­schlüsselte Hash zusammen mit dem Zertifi­kat des Ent­wick­lers - wird in einem speziel­len Bereich der aus­führ­baren Datei ein­gebettet, dem so­genann­ten Authenti­code Signa­ture Block. Dabei wird der Signatur­bereich selbst beim Berech­nen des Hashes aus­gespart, um das offen­sicht­liche Henne-Ei-Problem zu ver­meiden.

Wenn Windows die Datei prüft, kehrt es diesen Prozess um: Es liest die ein­gebettete Signatur, ent­nimmt das Zertifi­kat und ent­schlüsselt damit den ge­speicherten Hash - denn der öffent­liche Schlüssel aus dem Zertifi­kat kann ent­schlüsseln, was mit dem zugehöri­gen priva­ten Schlüssel ver­schlüsselt wurde. Gleich­zeitig be­rechnet Windows selbst einen neuen Hash über den aktuel­len Datei­inhalt. Stimmen beide Hashes überein, ist die Datei un­verändert und die Signatur gültig. Stimmen sie nicht überein, wurde die Datei manipu­liert.

Zusätzlich prüft Windows, ob das Zertifikat selbst vertrauens­würdig ist - also ob es von einer CA aus­gestellt wurde, die im Windows Root Store eingetragen ist. Dieser Root Store ist eine Liste von CAs, der Microsoft grund­sätzlich ver­traut und die mit Windows vor­installiert ist. Ist die Zertifikats­kette nicht bis zu einer ver­trauens­würdi­gen Root-CA nach­voll­zieh­bar, gilt das Zertifi­kat als un­gültig.

Eine wichtige Rolle spielen auch die Zeit­stempel. Zertifikate haben ein Ablauf­datum, typischer­weise nach einem oder zwei Jahren. Beim Signieren wird üblicher­weise auch ein krypto­graphischer Zeit­stempel eines un­abhängi­gen Zeit­stempel­dienstes ein­gebettet. Dieser belegt, dass die Signa­tur zu einem Zeit­punkt er­stellt wurde, als das Zertifi­kat noch gültig war. Damit bleibt eine einmal er­stellte Signatur auch nach Ablauf des Zertifi­kats gültig - eine praktisch wichtige Eigen­schaft, denn Soft­ware wird oft noch Jahre nach ihrer Ver­öffent­lichung ver­wendet.

Was die Prüfhäufigkeit angeht, unterschei­det Windows nach Art der Datei. Bei norma­len Desktop-Anwendun­gen erfolgt die strenge Signatur­prüfung haupt­sächlich beim ersten Aus­führen einer aus dem Internet herunter­gelade­nen Datei. Browser und der Windows-Explorer setzen dabei ein ver­steck­tes NTFS-Datei­attribut, den so­genannten Mark of the Web, der Windows signali­siert, dass die Datei aus dem Internet stammt. SmartScreen wertet dieses Attribut aus. Bei Treibern hin­gegen prüft der Windows-Kernel die Signatur bei jedem Laden streng und wieder­holt, da Treiber im privile­gier­ten Kernel­modus laufen und ein beson­ders hohes Sicher­heits­risiko dar­stellen.

Vergleich zu Linux

Linux verfolgt beim Thema Vertrauen und Software­integrität einen grund­legend anderen Ansatz, der sich aus der Geschichte und Philoso­phie des Systems ergibt. Anstatt das Vertrauen beim einzel­nen Entwickler zu ver­ankern, liegt es beim Öko­system als Ganzem.

Das klassische Linux-Modell basiert auf Paket­verwaltungs­systemen wie apt unter Debian und Ubuntu oder dnf unter Fedora. Dabei signiert nicht der Entwick­ler seine aus­führ­bare Datei direkt, sondern die Distribu­tion signiert ihr gesam­tes Repository mit einem GPG-Schlüssel. Wenn ein Ent­wickler Software in eine Distribu­tion ein­bringen möchte, durchläuft das Paket einen Prüf­prozess der Distribu­tion. Wird es akzeptiert, wird es von der Distribu­tion selbst sig­niert und über deren offi­zielle Server ver­teilt. Der Anwender vertraut also nicht dem Ent­wick­ler direkt, sondern der Distribu­tion als Mittels­mann und Prüf­instanz.

Neuere universelle Paketformate wie Flatpak und Snap gehen einen ähnli­chen Weg. Flatpak signiert jedes Paket krypto­graphisch, und die zentrale Plattform Flathub über­nimmt die Vertrauens­rolle ähnlich wie ein App Store. Snap läuft komplett über die Infra­struk­tur von Canonical, dem Ubuntu-Hersteller, der als zentrale Kontroll­instanz fungiert.

Die Schwachstelle dieses Ansatzes zeigt sich beim direkten Down­load. Wer unter Linux eine Binär­datei, ein AppImage oder ein Skript direkt von einer Website herunter­lädt, hat keine standardi­sierte Mög­lich­keit zu prüfen, ob die Datei authentisch und un­verändert ist. Manche Entwickler ver­öffent­lichen auf ihrer Web­site manuell einen SHA-256-Hash der Datei - doch das löst das Problem nur unvoll­ständig. Wie bereits deutlich wurde: Wird die Web­site gehackt und die Datei aus­getauscht, kann der Angrei­fer ebenso einfach den ver­öffent­lich­ten Hash ersetzen. Beide Angaben liegen auf dem­selben kompromit­tier­ten Server. Nur wenn der Hash über einen völlig un­abhängi­gen Kanal - eine andere Domain, ein Social-Media-Profil, ein GitHub-Release - ver­öffent­licht wird, ent­steht echte Sicher­heit.

Ein weiterer Unterschied liegt im Verhalten des Systems. Windows und macOS reagieren auf un­signierte Software mit aktiven Warn­hinweisen oder sogar Blockaden, die den Anwender direkt an­sprechen. Linux hingegen ver­traut dem Anwender grund­sätzlich mehr Eigen­verantwor­tung zu - es gibt keine system­weite Instanz, die beim Starten einer un­signierten Binär­datei warnt. Das passt zur Linux-Philosophie, ist aber für weniger tech­nisch versierte Anwender potenziell ris­kanter.

Kritik an dem teuren System

Der offensichtlichste Kritikpunkt am Code-Signing-System sind die Kosten. Für einen großen Software­konzern sind einige hundert Euro pro Jahr für ein EV-Zertifikat eine ver­nachlässig­bare Betriebsausgabe. Für einen Hobby­entwickler, einen Studenten oder ein kleines un­abhängi­ges Studio kann es jedoch eine erheb­liche finanzielle Hürde dar­stellen - insbeson­dere wenn die Software kostenlos oder als Open-Source-Projekt angeboten wird und keiner­lei Einnahmen ge­neriert. Das System be­nachteiligt struktu­rell genau jene Ent­wick­ler, die oft die innovativs­ten und am Gemein­wohl orientiertes­ten Beiträge leisten.

Noch grundlegender ist die Frage nach der Markt­struktur. Microsoft und Apple kontrollie­ren jeweils ihren eigenen Root Store - die Liste der CAs, deren Zertifi­kate als vertrauens­würdig gelten. Diese Kontrolle schafft eine künst­liche Markt­eintritts­barriere. Neue CAs, die günsti­gere oder gar kostenlose Zertifi­kate an­bieten woll­ten, müssten erst die Aufnahme in den Root Store beantragen und ge­nehmigt be­kommen - ein Prozess, der von den Plattform­betreibern kontrol­liert wird, die selbst kein Interesse an sinken­den Preisen haben. Das Ergebnis ist ein Oligopol mit wenigen etablier­ten Anbietern und kaum echtem Wett­bewerbs­druck nach unten.

Die Frage, ob Microsoft oder Apple direkt an den Zertifikats­verkäufen ver­dienen, ist nicht ein­deutig zu be­antwor­ten, da keine öffent­lichen Zahlen vor­liegen. Bekannt ist jedoch, dass CAs jähr­liche Gebühren für die Teil­nahme am Root-Store-Programm und für die not­wendigen Audits zahlen müssen. Diese Kosten geben die CAs selbst­verständ­lich an ihre Kunden weiter. Ob man das als ver­steckte Provision be­zeichnen will oder als legitime Verwaltungs­kosten, ist eine Frage der Perspek­tive - das Ergeb­nis für den Ent­wick­ler ist das­selbe.

Besonders augenfällig wird die Ungerechtig­keit des Systems, wenn man es mit dem Bereich der HTTPS-Zertifi­kate für Web­seiten ver­gleicht. Dort hat die Non-Profit-Organisa­tion Let's Encrypt bewiesen, dass voll­ständig kostenlose, automati­sierte und dennoch ver­läss­liche Zertifi­zierung mög­lich ist. Let's Encrypt wird von großen Organisa­tionen wie Mozilla, Google, der Electronic Frontier Founda­tion und anderen finanziert und hat inner­halb weniger Jahre die Mehr­heit aller aktiven Web­seiten mit kostenlosen HTTPS-Zertifi­katen ver­sorgt. Ein analoges Projekt für Code Signing exis­tiert bisher nicht - obwohl es tech­nisch ohne weiteres mach­bar wäre. Es fehlt schlicht der politi­sche und finan­zielle Wille der großen Akteure, die vom be­stehenden System profitie­ren oder zumin­dest kein Interesse an dessen Disrup­tion haben.

Schließlich ist auch die Zwangslage zu kritisie­ren, in die Entwickler ge­drängt werden. Da Windows durch seine Warn­hinweise und SmartScreen-Mechanis­men faktisch dafür sorgt, dass un­signierte Software vom durch­schnitt­lichen Anwender gemieden wird, haben Entwickler keine echte Wahl. Wer seine Software über das Internet ver­teilen will, muss zahlen. Microsoft hat damit eine Position ge­schaffen, in der sie durch die Gestal­tung ihrer eigenen Betriebs­system-Warnungen den Markt für Dritt­anbieter-Zertifi­kate am Leben er­halten - einen Markt, von dem sie zumin­dest indirekt profitie­ren. Für Einzel­entwickler und kleine Teams ist das eine un­befriedi­gende und schwer zu recht­ferti­gende Situa­tion, an der sich ohne exter­nen Druck oder eine Initiative ver­gleichbar mit Let's Encrypt in ab­sehbarer Zeit wenig ändern dürfte.


Aidex GmbH Software, 2026