SRI für Apache konfigurieren

Schritt-für-Schritt-Anleitung: integrity-Attribute im HTML setzen, CORS-Header für eigene Assets per .htaccess einrichten und SRI-Hashes automatisch per Build-Tool generieren.

Apache · Schritt für Schritt

SRI auf Apache: Was Sie wissen müssen

Apache selbst generiert keine SRI-Hashes und braucht keine spezielle Modul-Konfiguration dafür. Die SRI-Implementierung erfolgt direkt im HTML — Apache liefert die Seite aus, der Browser übernimmt die Hash-Prüfung. Für Shared Hosting auf Apache ist das ein Vorteil: Sie brauchen keine Root-Rechte.

Apache-spezifische Konfiguration ist nur für einen Fall nötig: wenn Sie SRI auch für eigene, self-hosted Assets verwenden wollen. Dafür muss Apache einen Access-Control-Allow-Origin-Header senden — erledigt in wenigen Zeilen per .htaccess mit dem IfModule mod_headers.c-Wrapper. Prüfen Sie ob mod_headers aktiviert ist: a2enmod headers && systemctl restart apache2. SRI bringt 15 von 166 Punkten im Wolf-Agents Web Security Check.

1 Schritt 1 von 4

SRI-Attribute im HTML setzen

Die SRI-Implementierung findet vollständig im HTML statt — Apache ist nicht beteiligt. Fügen Sie integrity und crossorigin zu jedem externen <script>- und <link>-Tag hinzu. Der Browser prüft den Hash vor der Ausführung.

HTML / PHP-Template integrity + crossorigin
<!-- OHNE SRI: Blindes Vertrauen in das CDN -->
<script src="https://cdn.example.com/jquery-3.7.1.min.js"></script>

<!-- MIT SRI: Browser blockiert manipulierte Dateien -->
<script
  src="https://cdn.example.com/jquery-3.7.1.min.js"
  integrity="sha384-1H217gwSVyLSIfaLxHbE7dRb3v4mYCKbpQvzx0cegeju1MVsGrX5xXxAvs/HgeFs"
  crossorigin="anonymous">
</script>

<!-- CSS-Stylesheet mit SRI -->
<link
  rel="stylesheet"
  href="https://cdn.example.com/bootstrap-5.3.0.min.css"
  integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM"
  crossorigin="anonymous">
require-sri-for (CSP) ist nicht verfügbar

Die CSP-Direktive require-sri-for wurde aus der W3C-Spezifikation entfernt. Chrome hat im Februar 2025 ein "Intent to Prototype" veröffentlicht — stabil ist sie in keinem Browser. Verlassen Sie sich nicht darauf: Setzen Sie SRI-Attribute direkt im HTML oder per Build-Tool.

Terminal Hash manuell generieren
# SRI-Hash per Kommandozeile generieren (empfohlen)
curl -s https://cdn.example.com/script.js | \
  openssl dgst -sha384 -binary | openssl base64 -A

# Ausgabe: vtXRMe3mGCbOeY7l30aIg8H9p3GdeSe4IFlP6ntaKlxkAolVRN...
# Im HTML: integrity="sha384-vtXRMe3mGCbOeY7l30aIg8..."

# Alternativ: Online-Generator srihash.org
2 Schritt 2 von 4

CORS-Header für eigene Assets konfigurieren

Wenn Sie SRI auch für self-hosted Assets verwenden — z. B. eine eigene app.js oder styles.css — muss Apache den Access-Control-Allow-Origin-Header senden. Ohne diesen Header kann der Browser den Dateiinhalt nicht lesen und den Hash nicht prüfen.

.htaccess Shared Hosting
# .htaccess — CORS-Header für eigene JS/CSS-Assets
<IfModule mod_headers.c>
  <FilesMatch ".(js|css)$">
    Header set Access-Control-Allow-Origin "*"
  </FilesMatch>
</IfModule>
httpd.conf / VirtualHost Dedizierter Server
# httpd.conf / VirtualHost — CORS für eigene Assets (spezifischer)
<IfModule mod_headers.c>
  <FilesMatch ".(js|css)$">
    # Nur eigene Domain erlauben (produktionssicherer als Wildcard)
    Header set Access-Control-Allow-Origin "https://www.ihre-domain.de"
  </FilesMatch>
</IfModule>

# mod_headers aktivieren (falls nötig, als root):
# sudo a2enmod headers && sudo systemctl reload apache2
Methode Einsatz Neustart nötig?
.htaccess Shared Hosting, kein Root-Zugriff Nein — sofort aktiv
httpd.conf Dedizierter Server, VirtualHost Ja — systemctl reload apache2
Für CDN-Ressourcen (jQuery, Bootstrap von cdnjs oder jsdelivr) ist kein CORS-Setup auf Ihrer Apache-Seite nötig — diese CDNs senden bereits Access-Control-Allow-Origin: *.
3 Schritt 3 von 4

Build-Pipeline-Integration (Webpack/Vite)

Manuelle Hash-Pflege ist fehleranfällig — jede Dateiänderung bricht den Hash. Für Produktions-Builds integrieren Sie die Hash-Generierung in Ihre Build-Pipeline. webpack-subresource-integrity und vite-plugin-sri fügen integrity-Attribute automatisch bei jedem Build ein.

webpack.config.js Webpack
// webpack.config.js — SRI-Hashes automatisch generieren
const SubresourceIntegrityPlugin = require('webpack-subresource-integrity');

module.exports = {
  output: {
    crossOriginLoading: 'anonymous',
  },
  plugins: [
    new SubresourceIntegrityPlugin({
      hashFuncNames: ['sha384'],
      enabled: process.env.NODE_ENV === 'production',
    }),
  ],
};
Installation

Webpack: npm install --save-dev webpack-subresource-integrity
Vite: npm install --save-dev vite-plugin-sri

vite.config.js Vite
// vite.config.js — SRI-Hashes automatisch generieren
import { defineConfig } from 'vite';
import sri from 'vite-plugin-sri';

export default defineConfig({
  plugins: [
    sri({
      algorithm: 'sha384',
    }),
  ],
});
Wenn Sie ein Build-Tool für SRI verwenden, stellen Sie sicher, dass Apache die kompilierten Assets mit dem korrekten Access-Control-Allow-Origin-Header ausliefert — sonst kann der Browser die Hash-Prüfung nicht abschließen.
4 Schritt 4 von 4

Konfiguration verifizieren

Nach der Konfiguration prüfen Sie in drei Schritten: CORS-Header per curl, integrity-Attribute im HTML-Quelltext und SRI-Fehler in der Browser-Konsole. Ein fehlender oder falscher Hash erscheint sofort als Konsolenfehler.

Terminal / Browser Verifizierung
# 1. CORS-Header für eigene Assets prüfen
curl -sI https://ihre-domain.de/assets/app.js | grep -i access-control
# Erwartete Ausgabe: access-control-allow-origin: *

# 2. Apache-Konfiguration neu laden (bei httpd.conf-Änderungen)
sudo systemctl reload apache2

# 3. Browser DevTools — SRI-Fehler prüfen
# F12 → Konsole → SRI-Fehler erscheinen als:
# "Failed to find a valid digest in the 'integrity' attribute"

# 4. Netzwerk-Tab: integrity-Attribut in HTML-Quelle prüfen
curl -s https://ihre-domain.de/ | grep -i integrity
mod_headers nicht aktiv?

Prüfen Sie mit apache2ctl -M | grep headers, ob headers_module geladen ist. Falls nicht: sudo a2enmod headers && sudo systemctl reload apache2. Auf RHEL/CentOS ist das Modul meist standardmäßig aktiv.

Wie steht Ihre Domain bei Subresource Integrity?

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

Häufig gestellte Fragen

Muss ich Apache speziell für SRI konfigurieren?

Kaum. Apache selbst generiert keine SRI-Hashes und muss dafür nicht konfiguriert werden. Die SRI-Attribute (integrity, crossorigin) werden direkt im HTML gesetzt. Konfiguration ist nur für CORS-Header nötig, wenn Sie SRI auch für eigene, self-hosted Assets verwenden wollen — das erledigt ein kurzer .htaccess-Eintrag.

Was macht der IfModule-Wrapper in der .htaccess für CORS?

Der Wrapper <IfModule mod_headers.c> verhindert, dass Apache mit einem Fehler startet, wenn mod_headers nicht geladen ist. Das ist besonders auf Shared Hosting wichtig, wo nicht alle Module aktiv sind. Ohne das Modul startet Apache normal, setzt aber keine CORS-Header — SRI für eigene Assets würde dann nicht funktionieren.

Warum brauche ich crossorigin="anonymous" bei SRI?

Ohne crossorigin="anonymous" hat der Browser keinen Zugriff auf den Dateiinhalt einer Cross-Origin-Ressource und kann den Hash nicht prüfen — SRI ist wirkungslos. Das Attribut aktiviert den CORS-Modus, sodass der Browser die Datei lesen und verifizieren kann. Bei same-origin Ressourcen ist das Attribut nicht zwingend, schadet aber nicht.

Funktioniert require-sri-for in der CSP auf Apache?

Nein. Die CSP-Direktive require-sri-for wurde aus der Spezifikation entfernt. Chrome hat im Februar 2025 ein "Intent to Prototype" veröffentlicht, jedoch ist sie in keinem Browser stabil verfügbar. Verlassen Sie sich nicht auf diese Direktive — setzen Sie SRI-Attribute stattdessen direkt per Build-Tool oder manuell im HTML.

Muss ich Apache nach .htaccess-Änderungen neu starten?

Nein. Apache liest .htaccess-Dateien bei jedem Request neu ein — ein Neustart ist nicht erforderlich. Bei Änderungen in httpd.conf oder apache2.conf hingegen müssen Sie Apache neu laden: sudo systemctl reload apache2 (Debian/Ubuntu) bzw. sudo systemctl reload httpd (RHEL/CentOS).

Wie generiere ich SRI-Hashes für CDN-Ressourcen ohne Build-Tool?

Per Kommandozeile: curl -s https://cdn.example.com/script.js | openssl dgst -sha384 -binary | openssl base64 -A. Das ergibt den Base64-kodierten Hash, den Sie mit dem Präfix sha384- in das integrity-Attribut einfügen. Alternativ nutzen Sie den Online-Generator srihash.org — URL eingeben, fertigen Tag mit Hash kopieren.

Was passiert, wenn ein CDN kein CORS unterstützt?

Dann kann der Browser den Dateiinhalt nicht lesen und SRI nicht prüfen — der Browser blockiert die Ressource komplett, sobald crossorigin="anonymous" gesetzt ist. In diesem Fall gibt es drei Optionen: CORS beim CDN-Anbieter aktivieren (oft über ein Dashboard möglich), auf ein CORS-fähiges CDN wechseln oder die Ressource lokal hosten.