Benutzerdefinierte Domains mit SSL sichern

Die SSL-Unterstützung für Ihre App Engine-Anwendung geht weit über den grundlegenden SSL-Funktionsumfang hinaus. Sie bietet global verteilte SSL-Endpunkte und 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. Nachdem die benutzerdefinierte Domain Ihrer Anwendung zugeordnet wurde und Sie Ihre DNS-Einträge konfiguriert haben, liefert App Engine ein verwaltetes SSL-Zertifikat, führt die Aktualisierung vor Ablauf des Zertifikats durch 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 serverloses 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 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. Darüber hinaus können Sie mit Cloud Load Balancing SSL-Richtlinien festlegen, die die Funktionen von SSL steuern, 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.

Ausstellung des verwalteten Zertifikats 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. Das verwaltete Zertifikat wird entweder von Google Trust Services (GTS) oder Let's Encrypt signiert.

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

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

    Zur Seite „Benutzerdefinierte Domains”

  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 durchfü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, gilt für jede Basisdomain ein Limit von 20 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:

    Zur Seite „Benutzerdefinierte Domains”

  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:

    Zur Seite „Benutzerdefinierte Domains”

  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. Die typischen Schritte sehen Sie jedoch unter Zertifikate anfordern.

  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. Weitere Informationen finden Sie unter Private Schlüssel umwandeln und SSL-Zertifikate verketten.

  5. Prüfen Sie, ob Sie die erforderlichen Berechtigungen in der 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:

      Zur Seite „SSL-Zertifikate”

    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 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. Die typischen Schritte sehen Sie unter Zertifikate anfordern.

  2. Wandeln Sie die private Schlüsseldatei und die SSL-Zertifikatsdatei in Formate um, die von App Engine unterstützt werden. Weitere Informationen finden Sie unter Private Schlüssel umwandeln und SSL-Zertifikate verketten.

  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 das Signieren 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.

    Tipp: Am einfachsten ist die E-Mail-Genehmigungsmethode. Sie müssen eine E-Mail-Adresse wie admin@example.com in Ihrem Domainkonto konfigurieren, damit Sie die Genehmigungsanfrage der Zertifizierungsstelle empfangen und darauf antworten können.

  5. Nachdem Sie die Genehmigung des Domaininhabers erteilt haben, sendet die Zertifizierungsstelle Ihnen das Zertifikat, das normalerweise im .zip-Dateiformat vorliegt. Diese Datei entpacken Sie in ein Arbeitsverzeichnis, damit Sie diese Zertifikate verketten und in App Engine hochladen können.

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
  • Wildcard
  • 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 Zwischen- oder 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 Console die Seite mit den Einstellungen für App Engine-SSL-Zertifikate 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.