security.txt in Spring Boot
security.txt nach RFC 9116 bereitstellen -- mit Spring MVC ResourceHandler, SecurityFilterChain-Freigabe und korrektem Cache-Control.
security.txt in Spring Boot
security.txt (RFC 9116) ist eine standardisierte Datei, die Sicherheitsforschern zeigt, wie sie Schwachstellen melden können. Die Datei muss unter /.well-known/security.txt erreichbar sein. Sie ist mit 2 von 166 Punkten im Wolf-Agents Web Security Check bewertet.
In Spring Boot platzieren Sie die Datei unter src/main/resources/static/.well-known/security.txt. Damit Spring MVC die Datei korrekt ausliefert, benoetigen Sie einen ResourceHandler. Zusaetzlich muss die SecurityFilterChain den /.well-known/**-Pfad freigeben, damit keine Authentifizierung erforderlich ist.
security.txt erstellen
Erstellen Sie die Datei unter src/main/resources/static/.well-known/security.txt. Die Pflichtfelder nach RFC 9116 sind Contact und Expires. Das Expires-Datum sollte maximal ein Jahr in der Zukunft liegen.
# src/main/resources/static/.well-known/security.txt
Contact: mailto:security@example.com
Expires: 2027-03-28T00:00:00.000Z
Preferred-Languages: de, en
Canonical: https://example.com/.well-known/security.txt
Policy: https://example.com/security-policy
# Optional aber empfohlen:
Encryption: https://example.com/.well-known/pgp-key.txt
Acknowledgments: https://example.com/hall-of-fameDas Expires-Feld ist ein Pflichtfeld. Setzen Sie einen Reminder, um die Datei vor Ablauf zu aktualisieren. Ein abgelaufenes Expires-Datum signalisiert, dass die Datei nicht mehr gepflegt wird.
ResourceHandler und SecurityConfig
Konfigurieren Sie einen ResourceHandler für den .well-known-Pfad und geben Sie den Pfad in der SecurityFilterChain frei. Ohne permitAll() für /.well-known/** erfordert Spring Security eine Authentifizierung -- Sicherheitsforscher können die Datei dann nicht abrufen.
// WebConfig.java -- ResourceHandler fuer .well-known
@Configuration
public class WebConfig
implements WebMvcConfigurer {
@Override
public void addResourceHandlers(
ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/.well-known/**")
.addResourceLocations(
"classpath:/static/.well-known/")
.setCacheControl(CacheControl
.maxAge(Duration.ofHours(1))
.cachePublic());
}
}// SecurityConfig.java -- .well-known freigeben
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http)
throws Exception {
http.authorizeHttpRequests(auth -> auth
// .well-known oeffentlich zugaenglich machen
.requestMatchers("/.well-known/**").permitAll()
.anyRequest().authenticated())
.headers(headers -> headers
.contentTypeOptions(Customizer.withDefaults()));
return http.build();
}Zugriff verifizieren
Prüfen Sie den Zugriff auf die security.txt per curl. Die Datei muss mit Status 200 und Content-Type text/plain ausgeliefert werden.
# security.txt pruefen
curl -sI http://localhost:8080/.well-known/security.txt
# Erwartete Ausgabe:
HTTP/1.1 200
content-type: text/plain
# Inhalt pruefen:
curl -s http://localhost:8080/.well-known/security.txt
# Erwartete Ausgabe:
Contact: mailto:security@example.com
Expires: 2027-03-28T00:00:00.000ZHäufige Fehler bei security.txt in Spring Boot
.well-known-Pfad durch Spring Security blockiert
Ohne permitAll() für /.well-known/** leitet Spring Security auf die Login-Seite weiter oder gibt 403 zurück. Fuegen Sie die Freigabe in die SecurityFilterChain ein.
Actuator-Pfad kollidiert mit .well-known
Wenn Actuator unter einem aehnlichen Pfad konfiguriert ist, kann es zu Routing-Konflikten kommen. Stellen Sie sicher, dass management.endpoints.web.base-path nicht mit /.well-known kollidiert.
Falscher Content-Type für security.txt
Spring MVC liefert .txt-Dateien standardmaessig mit text/plain aus. Falls ein anderer Content-Type gesetzt wird, konfigurieren Sie die ContentNegotiation oder setzen Sie den Header explizit.
Compliance-Relevanz
security.txt erleichtert die verantwortungsvolle Offenlegung von Schwachstellen und ist in mehreren Standards empfohlen.
Wie steht Ihre Domain bei security.txt?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.