Subresource Integrity auf Hetzner konfigurieren

Schritt-für-Schritt-Anleitung: SRI-Hashes auf Ihrem Hetzner Server generieren, integrity-Attribute in HTML einbinden und CDN-Cache-Invalidierung bei Asset-Updates beachten.

Hetzner · Schritt für Schritt

Subresource Integrity auf Hetzner

Subresource Integrity (SRI) schützt gegen kompromittierte CDNs und Man-in-the-Middle-Angriffe. Anders als alle anderen Security-Header ist SRI kein HTTP-Header, sondern ein HTML-Attribut: Sie fügen jedem externen <script>- und <link>-Tag ein integrity-Attribut mit einem kryptographischen Hash hinzu. Der Browser vergleicht den heruntergeladenen Inhalt mit dem Hash und blockiert die Ressource bei Abweichung.

Im Wolf-Agents Web Security Check bringt SRI 15 von 166 Punkten. Die Hashes generieren Sie direkt auf Ihrem Hetzner Server mit openssl — ein Standardtool auf jeder Linux-Installation. Besonders relevant ist SRI, wenn Sie Assets über ein CDN wie Bunny.net ausliefern.

1 Schritt 1 von 3

SRI-Hash auf dem Hetzner Server generieren

Berechnen Sie den SHA-384-Hash für jede externe JavaScript- und CSS-Datei. Auf Hetzner Cloud Servern ist openssl vorinstalliert. Der Hash muss bei jedem Asset-Update neu berechnet werden — das ist der entscheidende Punkt bei SRI.

Terminal (SSH auf Hetzner Server) Hash-Generierung
# SRI-Hash auf dem Hetzner Server generieren
# Methode 1: Lokale Datei
openssl dgst -sha384 -binary /var/www/html/assets/app.js | openssl base64 -A
# Ausgabe: oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/...

# Methode 2: Remote-Datei von CDN
curl -s https://cdn.example.com/lib.js | openssl dgst -sha384 -binary | openssl base64 -A

# Methode 3: shasum (Alternative ohne openssl)
shasum -b -a 384 /var/www/html/assets/app.js | awk '{print $1}' | xxd -r -p | base64
Warum SHA-384?

SHA-384 ist der empfohlene Algorithmus für SRI. SHA-256 wird ebenfalls unterstützt, SHA-512 ist möglich. Sie können auch mehrere Hashes angeben: integrity="sha384-abc... sha512-xyz..." — der Browser akzeptiert die Ressource, wenn mindestens ein Hash übereinstimmt.

2 Schritt 2 von 3

integrity-Attribut in HTML setzen

Fügen Sie das berechnete Hash als integrity-Attribut in das HTML ein. Für CDN-gehostete Ressourcen ist das crossorigin="anonymous"-Attribut zwingend erforderlich — ohne dieses Attribut wird der CORS-Check fehlschlagen und der Browser blockiert die Ressource.

HTML-Template Produktiv
<!-- Script mit SRI-Hash -->
<script
    src="https://cdn.example.com/lib.js"
    integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/..."
    crossorigin="anonymous">
</script>

<!-- Stylesheet mit SRI-Hash -->
<link
    rel="stylesheet"
    href="https://cdn.example.com/styles.css"
    integrity="sha384-AbCdEfGhIjKlMnOpQrStUvWxYz..."
    crossorigin="anonymous">
Nginx: CORS-Header für eigene Assets

Wenn Sie eigene Assets über Bunny.net CDN ausliefern, muss Ihr Hetzner Nginx-Server den Access-Control-Allow-Origin-Header für statische Dateien setzen. Ohne diesen Header kann der Browser den SRI-Check nicht durchführen.

/etc/nginx/snippets/static-assets.conf Nginx
# /etc/nginx/snippets/static-assets.conf
# Korrekte CORS-Header für eigene Assets,
# damit SRI auch bei CDN-Auslieferung funktioniert

location ~* \.(js|css)$ {
    add_header Access-Control-Allow-Origin "*";
    add_header Cache-Control "public, max-age=31536000, immutable";
    add_header X-Content-Type-Options "nosniff" always;
    try_files $uri =404;
}
3 Schritt 3 von 3

Verifizierung im Browser

SRI kann nicht per curl -sI geprüft werden — es ist ein HTML-Attribut, kein HTTP-Header. Prüfen Sie stattdessen den HTML-Quellcode und die Browser DevTools Console.

So prüfen Sie SRI

1. Öffnen Sie die Seite im Browser und drücken Sie F12 (DevTools). 2. Wechseln Sie zur Console — SRI-Fehler erscheinen als rote Fehlermeldungen. 3. Prüfen Sie den HTML-Quellcode (Rechtsklick > Seitenquelltext): Jedes externe Script und Stylesheet sollte ein integrity="sha384-..."-Attribut haben.

SRI-Fehler sind blockierend: Stimmt der Hash nicht überein, wird die Ressource nicht geladen. Testen Sie gründlich auf einer Staging-Umgebung, bevor Sie SRI in Produktion aktivieren.

Häufige Fehler bei SRI auf Hetzner

Hash-Mismatch nach Asset-Update

Wenn Sie eine JavaScript- oder CSS-Datei aktualisieren, ändert sich der Hash. Vergessen Sie nicht, den SRI-Hash im HTML ebenfalls zu aktualisieren. Bei Build-Tools wie Webpack oder Vite können Sie SRI-Hashes automatisch generieren lassen. Besonders tückisch: Bunny.net CDN kann die alte Datei aus dem Cache ausliefern, während der HTML-Code bereits den neuen Hash enthält. Lösung: CDN-Cache per Bunny.net API invalidieren, bevor Sie den HTML-Code deployen.

crossorigin="anonymous" fehlt

Für CDN-gehostete Ressourcen ist crossorigin="anonymous" Pflicht. Ohne dieses Attribut sendet der Browser einen nicht-anonymen (opaque) Request, und der SRI-Check scheitert — selbst wenn der Hash stimmt. Auf Ihrem Hetzner-Server muss die Nginx-Konfiguration den CORS-Header Access-Control-Allow-Origin für statische Dateien setzen.

CDN-Cache-Invalidierung bei Bunny.net

Bei Asset-Updates müssen Sie die Reihenfolge beachten: 1. Neue Datei auf Hetzner-Server deployen. 2. CDN-Cache bei Bunny.net purgen (POST /pullzone/{id}/purgeCache). 3. Erst dann HTML mit neuem SRI-Hash ausliefern. Wenn der HTML-Code vor dem CDN-Purge live geht, sehen Benutzer eine kaputte Seite, weil der alte CDN-Cache nicht zum neuen Hash passt.

Compliance-Relevanz

PCI DSS 4.0 Anforderung 6.4.3 fordert seit März 2025 ein Inventar aller auf Zahlungsseiten geladenen Scripts sowie deren Autorisierung und Integritätsprüfung. SRI ist die technische Umsetzung dieser Anforderung: Jedes Script wird per Hash autorisiert, nicht autorisierte Änderungen werden blockiert. NIS2 verlangt technische Maßnahmen zur Lieferkettensicherheit — SRI schützt gegen kompromittierte externe Abhängigkeiten. Der Wolf-Agents Web Security Check bewertet SRI mit bis zu 15 Punkten.

PCI DSS 4.0 Req 6.4.3 — Script-Inventar und Integritätsprüfung auf Zahlungsseiten
NIS2 Art. 21(d) — Sicherheit der Lieferkette, Schutz vor Drittanbieter-Kompromittierung

Wie steht Ihre Domain bei Subresource Integrity?

Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.