SSL-Zertifikat für Subdomain

RezaScript

Bekanntes Mitglied
Hallo, meine Frontend-Applikation kann keine Verbindung zur Spring-Boot-Applikation aufbauen. Bei einem Request gibt der Browser die Fehlermeldungen "CORS error" aus.

Wenn ich denselben Request mit Postman sende, bekomme ich die Fehlermeldung "SSL Error: Unable to verify the first certificate".

Die Frontend-Applikation hat bereits ein SSL-Zertifikat (Wildcard) und läuft über die Hauptdomain. Das Backend (Spring Boot) läuft auf einem anderen Server und enthält eine Subdomain und diese besitzt kein eigenes SSL-Zertifikat.

Ich habe also versucht, das Zertifikat, das ich bereits für die Hauptdomain verwende, auch für die Subdomain zu verwenden. Durch das Zertifikat habe ich also folgende Daten:
  • Private key (*.key)
  • Certificate (*.crt)
  • CA certificate (*-ca.crt)
Daraus habe ich dann folgende Dateien auf dem Backend-Server erstellt:
  • privkey.pem
  • chain.pem
  • fullchain.pem
Daraus habe ich dann wie folgt die Datei keystore.p12 generiert:
Bash:
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name spring-boot -CAfile chain.pem -caname root

Und diese Datei verwende ich nun in meiner application.yml-Datei von Spring Boot:

Code:
server:
  error:
    include-message: on-param
  port: 8080
  address: 0.0.0.0
  ssl:
    key-store: classpath:keystore.p12
    key-store-password: MyPassword
    key-store-type: PKCS12
    key-alias: spring-boot

Meine Konfiguration sieht so aus:
Java:
@Override
public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
        .allowedOrigins("http://localhost:4200", "https://example.com", "https://api.example.com")
        .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
        .allowedHeaders("*")
        .allowCredentials(true);
}

Was mache ich falsch?
 
Die Frontend-Applikation hat bereits ein SSL-Zertifikat (Wildcard) und läuft über die Hauptdomain. Das Backend (Spring Boot) läuft auf einem anderen Server und enthält eine Subdomain und diese besitzt kein eigenes SSL-Zertifikat.
Ein CORS-Fehler hat eigentlich nichts mit SSL zu tun, sondern mit der URL/Host welcher aufgerufen wird. Der Server der Frontend-Applikation muss den CORS-Header mitsenden, für den/die Hosts vom Backend, welche aufgerufen werden sollen:
Code:
apacheconf:
Header set Access-Control-Allow-Origin 'https://example.com'
Wobei localhost natürlich völlig überflüssig ist, da localhost je nach Standort etwas völlig anderes ist.

Ich habe selbst noch nie eine Spring Boot Anwendung mit SSL konfiguriert. Normalerweise hat man einen Proxy(im einfachsten Fall: Apache, NGINX) vor dem Backend und konfiguriert dort SSL und weitere Sicherheit wie IDS(Intrusion Detection System) usw.. Die Kommunikation zwischen Proxy und Server erfolgt idR. unverschlüsselt. Eine Anwendung besteht meistens nicht, aus nur einem Backend, meistens ist da ja eine ganze Kaskade von Anwendungen dahinter, mit Ausfallschutz, Skalierung und Redundanz.
 
Zuletzt bearbeitet:

Zurück
Oben