Benutzerdefinierte Domains mit SSL sichern

Die SSL-Unterstützung für Ihre App Engine-App geht weit über den grundlegenden SSL-Funktionsumfang hinaus. Sie bietet global verteilte SSL-Endpunkte und einen integrierten Lastenausgleich, um Ihre App 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. Sobald die benutzerdefinierte Domain Ihrer Anwendung zugeordnet ist und Sie Ihre DNS-Einträge konfiguriert haben, liefert App Engine ein verwaltetes SSL-Zertifikat, steuert die Aktualisierung vor dessen Ablauf und widerruft es, wenn Sie die benutzerdefinierte Domain aus Ihrer Anwendung entfernen.

Vorbereitung

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 ausgestellt. Das verwaltete Zertifikat ist von Let's Encrypt signiert.

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

Console
  1. Rufen Sie in der Google Cloud Platform Console App Engine > Einstellungen > Benutzerdefinierte Domains auf:

    Zur Seite "Benutzerdefinierte Domains"

  2. Die SSL-Sicherheit sollte als Von Google verwaltet angezeigt werden:

    Von Google verwaltete SSL-Sicherheit

gcloud
  1. Mit dem Befehl gcloud app domain-mappings prüfen Sie, ob das Zertifikat für Ihre App Engine-Anwendung bereitgestellt wurde:

    gcloud app domain-mappings list
  2. Sie sollten eine Liste Ihrer Domains, Subdomains und aller zugehörigen Zertifikate sehen. Beispiel:

    ID               SSL_CERTIFICATE_ID
    example.com      123456
    www.example.com  234567
    Es kann einige Minuten dauern, bis das Zertifikat ausgestellt wird. Während dieser Zeit wird das Zertifikat als PENDING_AUTO_CERT aufgeführt.

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 ausgeben.

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

  • Wenn kein verwaltetes Zertifikat ausgestellt wurde, weil die DNS-Einträge nicht verfügbar sind, gibt das Feld ManagedCertificate.ManagementStatus unter Umständen FAILED_RETRYING_NOT_VISIBLE zurück. 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. Folgen Sie dazu 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 erfüllt 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:

Console
  1. Rufen Sie in der Google Cloud Platform Console App Engine > Einstellungen > Benutzerdefinierte Domains auf:

    Zur Seite "Benutzerdefinierte Domains"

  2. Wählen Sie die Domain aus, die Sie sichern möchten, und klicken Sie auf SSL-Sicherheit aktivieren.

    SSL-Sicherheit auf der Seite "Benutzerdefinierte Domains" aktivieren

gcloud

Wenn Sie die Zuordnung der Domain zur Anwendung aktualisieren möchten, führen Sie den Befehl gcloud app domain-mappings so aus:

gcloud app domain-mappings update DOMAIN --certificate-management='AUTOMATIC'
API

Mit der Methode apps.domainMappings.patch in der Admin API können Sie die Domainzuordnung programmgesteuert aktualisieren, um eine Umstellung auf verwaltete SSL-Zertifikate vorzunehmen.

Verwaltete SSL-Zertifikate deaktivieren

So deaktivieren Sie verwaltete SSL-Zertifikate:

Console
  1. Rufen Sie in der Google Cloud Platform Console App Engine > Einstellungen > Benutzerdefinierte Domains auf:

    Weiter zur Seite "Benutzerdefinierte Domains"

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

    SSL-Sicherheit auf der Seite "Benutzerdefinierte Domains" deaktivieren

gcloud

Sie können ein verwaltetes SSL-Zertifikat deaktivieren, das bereits für eine Domainzuordnung verwendet wird. Alternativ können Sie festlegen, dass beim erstmaligen Zuordnen der benutzerdefinierten Domain kein verwaltetes SSL-Zertifikat verwendet wird.

  • Wenn Sie ein Zertifikat aus einer vorhandenen Zuordnung entfernen möchten, führen Sie den Befehl gcloud app domain-mappings so aus:

    gcloud app domain-mappings update DOMAIN --certificate-management='MANUAL'
    
  • So legen Sie fest, dass kein verwaltetes SSL-Zertifikat verwendet wird, wenn Sie Ihrer Anwendung zum ersten Mal eine neue benutzerdefinierte Domain zuordnen:

    gcloud app domain-mappings create DOMAIN --certificate-management='MANUAL'
    
API

Wenn Sie verwaltete SSL-Zertifikate programmgesteuert deaktivieren möchten, legen Sie mit der Methode apps.domainMappings.patch in der Admin API die manuelle SSL-Verwaltung fest.

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 für Zertifikatstransparenz und deren Einhaltung finden Sie unter Zertifikatstransparenz erzwingen.

So verwenden und verwalten Sie Ihre eigenen SSL-Zertifikate statt der von Google verwalteten 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. Bevor Sie Ihre Dateien hochladen können, muss der private Schlüssel in einen privaten RSA-Schlüssel umgewandelt und Ihre 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 GCP 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 vorgesehen ist, können Sie entweder die Inhaberschaft von www.example.com und sub.example.com oder nur 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:

    Console
    1. Rufen Sie in der Google Cloud Platform Console App Engine > Einstellungen > SSL-Zertifikate auf:

      Weiter zur Seite "SSL-Zertifikate"

    2. Klicken Sie auf Upload a new certificate (Neues Zertifikat hochladen).

      Zertifikate 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 GCP-Projekte sichtbar und verfügbar, sodass Sie dasselbe Zertifikat nicht wiederholt hochladen müssen.
    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.
    gcloud
    1. Mit dem folgenden Befehl gcloud app ssl-certificates laden Sie das SSL-Zertifikat und den privaten Schlüssel hoch:
      gcloud app ssl-certificates create --display-name CERT_DISPLAY_NAME --certificate CERT_DIRECTORY_PATH --private-key KEY_DIRECTORY_PATH

      wobei

      • CERT_DISPLAY_NAME der Anzeigename ist, den Sie für das Zertifikat verwenden.
        Beispiel: example.com
      • CERT_DIRECTORY_PATH der Verzeichnispfad und Dateiname des Zertifikats ist.
        Beispiel: ./cert.crt
      • KEY_DIRECTORY_PATH der Verzeichnispfad und Dateiname des privaten Schlüssels ist.
        Beispiel: ./private.key

      Beispiel:

      gcloud app ssl-certificates create --display-name example.com --certificate ./cert.crt --private-key ./private.key
    2. Mit dem folgenden Befehl gcloud app domain-mappings erstellen Sie die Zuordnung zwischen der Domain und der App Engine-Anwendung mithilfe von SSL:
      gcloud app domain-mappings create DOMAIN --certificate-id CERT_ID

      wobei

      • DOMAIN die Domain ist, die Sie der App Engine-Anwendung zuordnen möchten.
        Beispiel: *.example.com

        Tipp: Verwenden Sie Anführungszeichen für Ihre Domain, wenn bei der Verwendung von Zuordnungen mit Platzhalter ein Fehler auftritt: '*.example.com'

      • CERT_ID die ID des Zertifikats ist, das Sie für SSL verwenden möchten.
        Beispiel: --certificate-id 1234

      Beispiel:

      gcloud app domain-mappings create '*.example.com' 1234

  7. Testen Sie Ihre Änderungen. Dazu rufen Sie 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 bereitgestellt ist.

So übertragen Sie Zuordnungen von einem aktiv bereitgestellten Zertifikat:

  1. Lassen Sie sich von der Zertifizierungsstelle (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 hierzu 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:

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

      Weiter zur Seite "SSL-Zertifikate"
      1. Klicken Sie auf Upload a new certificate (Neues Zertifikat hochladen).

        Zertifikate hochladen
      2. Laden Sie unter PEM-codiertes X.509-Zertifikat für öffentlichen Schlüssel 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 in der Zertifikatsliste aus und wählen Sie dann die Domain mit dem alten bereitgestellten Zertifikat aus.
    3. Klicken Sie auf Speichern, um die Zuordnungen vom alten zum neuen Zertifikat zu übertragen.
    gcloud

    Mit dem folgenden Befehl gcloud app ssl-certificates aktualisieren Sie das SSL-Zertifikat und den privaten Schlüssel:

    gcloud app ssl-certificates update CERT_ID --certificate CERT_DIRECTORY_PATH --private-key KEY_DIRECTORY_PATH

    wobei

    • CERT_ID die ID des SSL-Zertifikats ist, das Sie aktualisieren möchten.
      Beispiel: 1234
    • CERT_DIRECTORY_PATH der Verzeichnispfad und Dateiname des SSL-Zertifikats ist.
      Beispiel: ./cert.crt
    • KEY_DIRECTORY_PATH der Verzeichnispfad und Dateiname des privaten Schlüssels ist.
      Beispiel: ./private.key

    Beispiel:

    gcloud app ssl-certificates update 1234 --certificate ./cert.crt --private-key ./private.key

Zertifikat anfordern

Das Verfahren zum Abrufen eines SSL-Zertifikats hängt von der verwendeten Zertifizierungsstelle ab. Dazu muss die hier vorliegende Anleitung möglicherweise geringfügig angepasst werden. In der Regel stellt jede Zertifizierungsstelle Anleitungen zur Verfügung, die Sie durch das Verfahren führen.

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. Führen Sie den folgenden Befehl in einem Verzeichnis aus, in dem Sie die Datei server.csr 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 die generierte Datei für Ihre Anfrage zur Signierung des Zertifikats ist. 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
      • Ihren Firmennamen; 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 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, befolgen Sie 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 in Ihrem Domainkonto konfigurieren, zum Beispiel admin@example.com, damit Sie die Genehmigungsanforderung der Zertifizierungsstelle empfangen und beantworten können.

  5. Nachdem Sie die Genehmigung des Domaininhabers erteilt haben, sendet die Zertifizierungsstelle Ihnen das Zertifikat, das normalerweise im .zip-Dateiformat vorliegt. Entpacken Sie diese Datei 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. Führen Sie beispielsweise den Befehl openssl rsa aus:

    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 generierte 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. Verketten Sie 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 Zertifikatdateien von Ihrer Zertifizierungsstelle
    • [MY_CONCAT_CERT].crt ist die verkettete Datei, die Ihre .crt-Zertifikatsdateien von Ihrer Zertifizierungsstelle enthält; Beispiel: concat.crt

      Beispiel:

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

    1. Prüfen Sie, ob der private Schlüssel und das Zertifikat übereinstimmen. Dazu verwenden Sie die Befehle openssl x509 und openssl rsa. 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 das gleiche 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-Teilungsrest: 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 Platzhalterzertifikat einzurichten. Platzhalterzertifikate unterstützen nur eine Subdomainebene.

Strict-Transport-Security-Header verwenden

Aus Sicherheitsgründen sollten alle Anwendungen von Clients eine Verbindung über https anfordern. Mit dem Header Strict-Transport-Security können Sie Browser anweisen, https statt http zu verwenden.

Sie sollten HTTP Strict Transport Security mit Bedacht implementieren. Clients, die diesen Header in der Vergangenheit erhalten haben, verweigern die Verbindung, wenn https nicht funktionsfähig oder aus irgendeinem Grund deaktiviert ist. Weitere Informationen finden Sie im HTTP Strict Transport Security Cheat Sheet.

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

App Engine-Standardumgebung für Python 2