Benutzerdefinierte Domains mit SSL schützen

Die App Engine-SSL-Unterstützung bietet global verteilte SSL-Endpunkte und ein integriertes Load-Balancing, um Ihre Anwendung weltweit sicher, zuverlässig und schnell Ihrer Zielgruppe bereitzustellen.

Standardmäßig werden HTTPS-Verbindungen in Ihrer benutzerdefinierten Domain automatisch mithilfe von verwalteten SSL-Zertifikaten aktiviert. Nach dem Zuordnen einer benutzerdefinierten Domain zu Ihrer Anwendung und Aktualisieren Ihrer DNS-Einträge stellt App Engine ein verwaltetes SSL-Zertifikat bereit, verlängert das Zertifikat und widerruft es, wenn Sie die benutzerdefinierte Domain aus Ihrer Anwendung entfernen.

Vorbereitung

  • Im App Engine-Projekt muss die benutzerdefinierte Domain bereits eingerichtet sein.

  • Wenn Sie Cloud Load Balancing und serverlose Netzwerk-Endpunktgruppen (NEGS) nutzen, um Traffic an Ihre App Engine-Anwendung weiterzuleiten, empfehlen wir, Ihre benutzerdefinierte Domain dem Load-Balancer und nicht direkt Ihrer Anwendung zuzuordnen. Außerdem sollten Sie von Google verwaltete SSL-Zertifikate verwenden, die für den Load-Balancer erstellt wurden. Dadurch entfällt die Notwendigkeit, für jede serverlose Anwendung separate SSL-Zertifikate zu verwalten. Mit Cloud Load Balancing können Sie SSL-Richtlinien zum Steuern der Funktionen von SSL festlegen, die Ihr Load-Balancer mit Clients aushandelt.

    Weitere Informationen finden Sie auf den folgenden Seiten:

    Beachten Sie die folgende Einschränkung:

    • Wir empfehlen die Verwendung von Steuerelementen für eingehenden Traffic, damit Ihre Anwendung nur Anfragen empfängt, die vom Load-Balancer (und ggf. von der VPC) gesendet werden. Andernfalls können Nutzer die App Engine-URL Ihrer Anwendung verwenden, um den Load-Balancer, die Google Cloud Armor-Sicherheitsrichtlinien, SSL-Zertifikate und private Schlüssel zu umgehen, die über den Load-Balancer weitergegeben werden.

Verwaltetes Zertifikat prüfen

Nachdem Sie Ihre benutzerdefinierte Domain eingerichtet und die DNS-Einträge aktualisiert haben, wird automatisch innerhalb weniger Minuten ein verwaltetes SSL-Zertifikat bereitgestellt. Die Auswahl der Zertifizierungsstelle erfolgt automatisch. Das verwaltete Zertifikat wird entweder von Google Trust Services (GTS) oder Let's Encrypt signiert.

So prüfen Sie, ob das Zertifikat bereitgestellt wurde:

  1. Wechseln Sie in der Google Cloud Console zu App Engine > Einstellungen > Benutzerdefinierte Domains:

    Benutzerdefinierte Domains aufrufen

  2. Die SSL-Sicherheit wird als Von Google verwaltet angezeigt.

Fehler bei verwalteten SSL-Zertifikaten beheben

  • Möglicherweise müssen Sie die DNS-Einträge für Ihre benutzerdefinierte Domain aktualisieren, um den Domainnamen zu bestätigen. App Engine kann keine Zertifikate für nicht bestätigte Domains ausstellen.

  • Sie können den Status Ihres Zertifikats mit der Admin API über die Anfrage AuthorizedCertificate.GET prüfen.

  • Wenn kein verwaltetes Zertifikat ausgestellt wurde, weil die DNS-Einträge nicht verfügbar sind, ist im Feld ManagedCertificate.ManagementStatus möglicherweise FAILED_RETRYING_NOT_VISIBLE angegeben. Prüfen Sie in diesem Fall, ob die DNS-Einträge auf dem neuesten Stand sind. Warten Sie einige Minuten und versuchen Sie es dann noch einmal. Es kann bis zu 24 Stunden dauern, bis DNS-Einträge verfügbar werden.

  • Wenn der Status FAILED_PERMANENT lautet, sind alle Aktualisierungsversuche gescheitert. Überprüfen Sie Ihre DNS-Einstellungen noch einmal und aktualisieren Sie dann die Zuordnung Ihrer benutzerdefinierten Domain. Dazu folgen Sie den Schritten unter Upgrade auf verwaltete SSL-Zertifikate durchführen.

Upgrade auf verwaltete SSL-Zertifikate ausführen

Beachten Sie vor dem Upgrade auf von Google verwaltete SSL-Zertifikate, dass Platzhalterzuordnungen durch verwaltete Zertifikate nicht unterstützt werden.

Wenn Sie Subdomains verwenden und das Zertifikat von Let's Encrypt ausgestellt wurde, gilt für jede Basisdomain ein Limit von 50 verwalteten Zertifikaten pro Woche. Ist das Limit erreicht, versucht App Engine weiterhin, verwaltete Zertifikate auszustellen, bis alle Anfragen abgearbeitet sind.

Wenn Sie von Ihren eigenen SSL-Zertifikaten zu von Google verwalteten SSL-Zertifikaten wechseln oder einer vorhandenen Anwendung mit einer benutzerdefinierten Domain verwaltete SSL-Zertifikate hinzufügen möchten, aktualisieren Sie die Zuordnung Ihrer Domain:

  1. Wechseln Sie in der Google Cloud Console zu App Engine > Einstellungen > Benutzerdefinierte Domains:

    Benutzerdefinierte Domains aufrufen

  2. Wählen Sie die zu sichernde Domain aus und klicken Sie auf Verwaltete Sicherheit aktivieren.

Verwaltete SSL-Zertifikate deaktivieren

So deaktivieren Sie verwaltete SSL-Zertifikate:

  1. Wechseln Sie in der Google Cloud Console zu App Engine > Einstellungen > Benutzerdefinierte Domains:

    Benutzerdefinierte Domains aufrufen

  2. Wählen Sie die Domain aus und klicken Sie auf Verwaltete Sicherheit deaktivieren.

Eigene SSL-Zertifikate verwenden

Sie können anstelle von verwalteten SSL-Zertifikaten eigene Zertifikate verwenden. Wenn Ihr Zertifikat keinen Transparenznachweis enthält, zeigt die Anwendung möglicherweise SSL-Warnungen in Chrome an, da Nachweise der Zertifikatstransparenz erzwungen werden. Weitere Informationen zu Nachweisen der Zertifikatstransparenz und dem Erbringen dieser Nachweise finden Sie unter Zertifikatstransparenz erzwingen.

So verwenden und verwalten Sie Ihre eigenen SSL-Zertifikate anstatt von Google verwaltete Zertifikate:

  1. Im App Engine-Projekt muss die benutzerdefinierte Domain bereits eingerichtet sein.

  2. Deaktivieren Sie die von Google verwalteten Standardzertifikate.

  3. Lassen Sie sich von der Zertifizierungsstelle (CA) Ihrer Wahl ein Zertifikat für die Domain ausstellen. Die genaue Vorgehensweise kann je nach Zertifizierungsstelle variieren.

  4. Wandeln Sie die private Schlüsseldatei und die SSL-Zertifikatsdatei in Formate um, die von App Engine unterstützt werden. Damit Sie Ihre Dateien hochladen können, muss der private Schlüssel in einen privaten RSA-Schlüssel umgewandelt und die SSL-Zertifikate müssen zu einer einzigen Datei verkettet werden.

  5. Prüfen Sie, ob Sie die erforderlichen Berechtigungen in der Google Cloud Console und die bestätigte Inhaberschaft (Schritt 3) für alle zugehörigen Domains oder deren übergeordnete Domains haben. Beispiel:

    • Wenn das Zertifikat für www.example.com vorgesehen ist, können Sie die Inhaberschaft von www.example.com oder von example.com bestätigen.
    • Wenn das Zertifikat für www.example.com und sub.example.com bestimmt ist, können Sie entweder die Inhaberschaft von www.example.com und sub.example.com oder aber von example.com bestätigen.
    • Wenn das Zertifikat für *.example.com bestimmt ist, müssen Sie die Inhaberschaft von example.com bestätigen.
  6. Laden Sie den privaten Schlüssel und das SSL-Zertifikat hoch und ordnen Sie Ihre Domain dann der Anwendung zu:

    1. Wechseln Sie in der Google Cloud Console zu App Engine > Einstellungen > SSL-Zertifikate:

      SSL-Zertifikate aufrufen

    2. Klicken Sie auf Neues Zertifikat hochladen.

    3. Laden Sie unter PEM encoded X.509 public key certificate das verkettete SSL-Zertifikat hoch, z. B. concat.crt. Laden Sie dann unter Nicht verschlüsselter PEM-codierter privater RSA-Schlüssel Ihren privaten RSA-Schlüssel hoch, z. B. myserver.key.pem.
    4. Klicken Sie auf Hochladen. Jedes von Ihnen hochgeladene SSL-Zertifikat ist für alle anderen Google Cloud-Projekte sichtbar und verfügbar. Sie müssen also dasselbe Zertifikat nicht mehrfach hochladen.
    5. Wählen Sie das Zertifikat aus, das Sie einer Domain zuweisen möchten, und klicken Sie dann auf Speichern, um für diese Domain SSL zu verwenden.

  7. Testen Sie Ihre Änderungen. Rufen Sie dazu die Domain in Ihrem Browser per https auf, z. B. https://www.example.com.

Zuordnungen von einem bereitgestellten auf ein neues Zertifikat übertragen

Wenn das Ablaufdatum eines Zertifikats näher rückt, müssen Sie ein neues Zertifikat hochladen und die vorhandenen Zuordnungen des alten Zertifikats auf dieses neue Zertifikat übertragen. Bei der folgenden Vorgehensweise wird davon ausgegangen, dass das vorhandene Zertifikat noch nicht abgelaufen ist und derzeit für Ihre benutzerdefinierte Domain verwendet wird.

So übertragen Sie Zuordnungen von einem aktiv bereitgestellten Zertifikat:

  1. Lassen Sie sich von der Zertifizierungsstelle (Certificate Authority, CA) Ihrer Wahl ein neues Zertifikat für Ihre Domain ausstellen.

  2. Wandeln Sie die private Schlüsseldatei und die SSL-Zertifikatsdatei in Formate um, die von App Engine unterstützt werden.

  3. Laden Sie den privaten RSA-Schlüssel und das verkettete SSL-Zertifikat hoch:

    1. Laden Sie das SSL-Zertifikat auf der Seite SSL-Zertifikate hoch.

      Zur Seite „SSL-Zertifikate”
      1. Klicken Sie auf Neues Zertifikat hochladen.

      2. Laden Sie unter PEM-codiertes X.509-Public-Key-Zertifikat das verkettete SSL-Zertifikat hoch, z. B. concat.crt. Laden Sie dann unter Nicht verschlüsselter PEM-codierter privater RSA-Schlüssel Ihren privaten RSA-Schlüssel hoch, z. B. myserver.key.pem.
      3. Klicken Sie auf Hochladen.
    2. Wählen Sie das neu hinzugefügte Zertifikat aus der Zertifikatsliste und dann die Domain mit dem alten bereitgestellten Zertifikat aus.
    3. Klicken Sie auf Speichern, um die Zuordnungen vom alten zum neuen Zertifikat zu übertragen.

Zertifikat anfordern

Das Verfahren zum Abrufen eines SSL-Zertifikats hängt von der verwendeten Zertifizierungsstelle ab. Um es auszuführen, muss die vorliegende Anleitung eventuell leicht angepasst werden. In der Regel stellt jede Zertifizierungsstelle eine Anleitung zur Verfügung, die Sie schrittweise durch das Verfahren führt.

So fordern Sie ein Zertifikat für die Verwendung mit Ihrer App Engine-Anwendung an:

  1. Generieren Sie den privaten Schlüssel und eine Anfrage für die Signierung des Zertifikats (Certificate Signing Request, CSR) mithilfe des openssl-Tools:

    1. Sie führen den folgenden Befehl in einem Verzeichnis aus, in dem Sie die server.csr-Datei erstellen möchten.

      openssl req -nodes -newkey rsa:2048 -keyout [MY_PRIVATE_KEY].key -out [MY_CSR].csr
      

      Dabei gilt:

      • [MY_PRIVATE_KEY].key ist die generierte Datei, in der Ihr privater Schlüssel gespeichert ist. Beispiel: myserver.key
      • [MY_CSR].csr ist die generierte Datei für Ihre Anfrage zur Signierung des Zertifikats. Beispiel: server.csr
    2. Geben Sie die folgenden Informationen ein, wenn Sie dazu aufgefordert werden:

      • Ihren zweistelligen Ländercode, zum Beispiel US für die USA
      • Den Namen Ihrer Stadt
      • Den Name Ihres Unternehmens Sie können Ihren eigenen Namen verwenden, wenn Sie keine Firma haben
      • Ihre Organisationseinheit oder NA, falls keine solche vorhanden ist
      • Einen allgemeinen Namen, der Ihre Domain darstellt, zum Beispiel: www.example.com
      • Ihre E-Mail-Adresse

      Alle anderen Werte sind optional und müssen nicht angegeben werden.

  2. Ermitteln Sie, welche Zertifizierungsstelle für Sie geeignet ist, und erwerben Sie dann ein Zertifikat. Sie können beispielsweise SSLMate, Thawte, Comodo oder eine beliebige andere Zertifizierungsstelle verwenden.

    Ausführliche Informationen zu den unterstützten Zertifikatstypen finden Sie unter App Engine-Unterstützung für SSL-Zertifikate.

  3. Wenn Ihre Zertifizierungsstelle den Inhalt Ihrer CSR-Datei anfordert, richten Sie sich nach deren Anleitung zum Kopieren und Einfügen von Inhalten aus der .csr-Datei, die Sie zuvor erstellt haben, zum Beispiel server.csr.

  4. Folgen Sie den Aufforderungen, wenn Ihre Zertifizierungsstelle die Genehmigung des Domaininhabers anfordert.

  5. Nachdem Sie die Genehmigung des Domaininhabers erteilt haben, sendet die Zertifizierungsstelle Ihnen das Zertifikat, bei dem es sich in der Regel um eine ZIP-Datei handelt. Entpacken Sie diese Datei in ein Arbeitsverzeichnis, um diese Zertifikate für den Upload in App Engine zu verketten.

Private Schlüssel umwandeln und SSL-Zertifikate verketten

Bevor Sie Ihren privaten Schlüssel und Ihre SSL-Zertifikate in App Engine hochladen, müssen Sie Ihren privaten Schlüssel in einen privaten RSA-Schlüssel umwandeln und alle SSL-Zertifikate verketten.

  1. Wandeln Sie die zuvor generierte private Schlüsseldatei in einen nicht verschlüsselten privaten RSA-Schlüssel um. Sie können beispielsweise den Befehl openssl rsa ausführen:

    openssl rsa -in [MY_PRIVATE_KEY].key -out [MY_RSA_KEY].key.pem
    

    Dabei gilt:

    • [MY_PRIVATE_KEY].key ist die generierte Datei, in der Ihr privater Schlüssel gespeichert ist. Beispiel: myserver.key
    • [MY_RSA_KEY].key ist die erzeugte Datei, die den nicht verschlüsselten privaten RSA-Schlüssel enthält. Beispiel: myserver.key.pem

      Beispiel:

      openssl rsa -in myserver.key -out myserver.key.pem
      
  2. Sie verketten alle .crt-Dateien von Ihrer Zertifizierungsstelle mit dem folgenden Befehl zu einer Datei:

    cat [MY_DOMAIN_CERT].crt [MY_SecureServerCA].crt [MY_TrustCA].crt [MY_TrustExternalCARoot].crt > [MY_CONCAT_CERT].crt
    

    Dabei gilt:

    • [MY_DOMAIN_CERT].crt ist das Zertifikat für Ihre Domain. Beispiel: www_example_com.crt
    • [MY_SecureServerCA].crt, [MY_TrustCA].crt und [MY_TrustExternalCARoot].crt sind die anderen Zertifikatsdateien von Ihrer Zertifizierungsstelle
    • [MY_CONCAT_CERT].crt ist die verkettete Datei mit den Inhalten aller .crt-Zertifikatsdateien von Ihrer Zertifizierungsstelle, Beispiel: concat.crt

      Beispiel:

      cat www_example_com.crt AddTrustExternalCARoot.crt RSADomainValidationSecureServerCA.crt RSAAddTrustCA.crt > concat.crt
      
  3. Prüfen Sie Ihr SSL-Zertifikat und den privaten Schlüssel:

    1. Prüfen Sie, ob der private Schlüssel und das Zertifikat übereinstimmen. Dazu können Sie die Befehle openssl x509 und openssl rsa verwenden. Beispiele:

      openssl x509 -noout -modulus -in concat.crt | openssl md5
      openssl rsa -noout -modulus -in myserver.key.pem | openssl md5
      

      Die Befehle openssl x509 und openssl rsa sollten dasselbe Ergebnis liefern.

    2. Zum Überprüfen der Gültigkeit eines Zertifikats und seiner CA-Kette können Sie den Befehl openssl verify verwenden. Beispiel:

      openssl verify -verbose -CAfile concat.crt concat.crt
      
  4. Wenn Sie fertig sind, können Sie den privaten RSA-Schlüssel und die verketteten Zertifikate in App Engine hochladen.

App Engine-Unterstützung für SSL-Zertifikate

App Engine unterstützt die folgenden Zertifikatstypen:

  • Einzelne Domain/einzelner Hostname
  • Selbstsigniert
  • Platzhalter
  • Alternativer Antragstellername (SAN)/Mehrere Domains

Ihre Zertifikate und Schlüssel müssen verschiedene Anforderungen erfüllen:

  • Der private Schlüssel und das Zertifikat sollten im PEM-Format hochgeladen werden.
  • Private Schlüssel dürfen nicht verschlüsselt sein.
  • Eine Zertifikatsdatei darf höchstens fünf Zertifikate enthalten, einschließlich verketteter und Zwischenzertifikate.
  • Alle Antragstellernamen auf dem Hostzertifikat sollten mit den vom Nutzer verifizierten Domains übereinstimmen oder Subdomains davon sein.
  • Private Schlüssel müssen RSA-Verschlüsselung verwenden.
  • Maximal zulässiger Schlüssel-Modulus: 2.048 Bit.

Wenn das Hostzertifikat ein Zwischenzertifikat oder ein verkettetes Zertifikat erfordert (das viele Zertifizierungsstellen ausstellen), müssen Sie die Zwischenzertifikate oder verketteten Zertifikate an das Ende der öffentlichen Zertifikatsdatei anfügen.

Einige App Engine-Features verwenden spezielle Subdomains. Beispielsweise kann eine Anwendung Subdomains verwenden, um Anwendungsdienste oder verschiedene Versionen Ihrer Anwendung anzusprechen. Um diese mit SSL zu verwenden, ist es sinnvoll, ein SAN- oder Wildcard-Zertifikat einzurichten. Wildcard-Zertifikate unterstützen nur eine Subdomainebene.

Benutzerdefinierte SSL-Zertifikate entfernen

Führen Sie die folgenden Schritte aus, um die Verwendung eines benutzerdefinierten SSL-Zertifikats einzustellen:

  1. Rufen Sie in der Google Cloud Console die Seite mit den Einstellungen für SSL-Zertifikate in App Engine auf.

    Zu den SSL-Zertifikateinstellungen

  2. Klicken Sie auf das Zertifikat, das Sie aus Ihrer Domain entfernen möchten.

  3. Heben Sie die Auswahl des Domainnamens auf, für den Sie das SSL-Zertifikat nicht mehr verwenden möchten, und klicken Sie dann auf Speichern.

Strict-Transport-Security-Header verwenden

Aus Sicherheitsgründen sollten alle Anwendungen von Clients eine Verbindung über https anfordern. Wenn Sie den Browser anweisen möchten, https anstelle von http zu verwenden, geben Sie den Header Strict-Transport-Security an.

Aktivierte TLS-Versionen und -Chiffren aufrufen

  1. Installieren Sie auf Ihrem Computer den nmap-Network Mapper, falls dieser noch nicht verfügbar ist. Eine Installationsanleitung finden Sie unter https://nmap.org/.

  2. Geben Sie den folgenden Befehl ein, um festzustellen, welche TLS-Versionen und -Chiffren für Ihre Anwendung aktiviert sind:

    nmap -sV --script ssl-enum-ciphers -p 443 HOSTNAME

    Ersetzen Sie HOSTNAME durch den Hostnamen für Ihre Anwendung. Sie können entweder Ihre benutzerdefinierte Domain oder den appspot.com-Hostnamen verwenden, den App Engine für Ihre Anwendung erstellt hat. Beispiel:

    nmap -sV --script ssl-enum-ciphers -p 443 example.uc.r.appspot.com

TLS-Versionen und -Chiffren deaktivieren

Wenn Sie Cloud Load Balancing und serverlose NEGs verwenden, um Traffic an Ihre App Engine-Anwendung weiterzuleiten, können Sie eine TLS-Version oder -Chiffre deaktivieren, wenn Sie eine SSL-Sicherheitsrichtlinie definieren. Diese gibt an, welche TLS-Versionen und -Chiffren für HTTPS- oder SSL-Verbindungen verwendet werden können.

Nächste Schritte

Informationen zum Verwalten eingehender Anfragen an Ihre benutzerdefinierte Domain durch Cloud Load Balancing finden Sie unter Benutzerdefinierte App Engine-Domain zu Cloud Load Balancing migrieren.