TLS für API BaaS konfigurieren

Edge for Private Cloud v4.18.01

TLS (Transport Layer Security, dessen Vorgänger SSL ist) ist die Standardsicherheitstechnologie, die für sicheres, verschlüsseltes Messaging in Ihrer API-Umgebung sorgt. Sie können TLS auf API BaaS-Portal- und API BaaS-Stack-Knoten konfigurieren.

Die folgende Abbildung zeigt ein typisches Bereitstellungsdiagramm für API BaaS mit einem einzelnen BaaS-Portal-Knoten und drei API BaaS-Stack-Knoten.

Entwickler verwenden einen Browser, um Anfragen an das Portal zu senden. Standardmäßig verwenden die Anfragen das HTTP-Protokoll an Port 9000 des Portal-Knotens.

Diese Bereitstellung umfasst einen Load Balancer zwischen den Portal- und Stack-Knoten. In dieser Konfiguration sendet das Portal HTTP-Anfragen an den Load Balancer, der die Anfragen dann an einen der Stack-Knoten weiterleitet. Dies ist die empfohlene Bereitstellungsumgebung für ein Produktionssystem.

TLS-Konfigurationsoptionen

Wenn Sie TLS für API BaaS konfigurieren, haben Sie mehrere Möglichkeiten:

  • TLS auf dem Portal und auf dem Load Balancer für die Stack-Knoten konfigurieren

    In dieser Konfiguration verwenden Entwickler das HTTPS-Protokoll, um auf das Portal zuzugreifen. Das im Browser ausgeführte Portal verwendet HTTPS, um über den Load Balancer Anfragen an die Stack-Knoten zu senden. Der Load Balancer verwendet HTTP, um auf die Stack-Knoten zuzugreifen.
  • TLS auf dem Portal, dem Load Balancer und den Stack-Knoten konfigurieren

    Konfigurieren Sie den Load Balancer für zusätzliche Sicherheit so, dass er TLS für den Zugriff auf die Stack-Knoten verwendet.
  • TLS im Portal und auf einem einzelnen Stack-Knoten konfigurieren

    In einer kleinen Umgebung, z. B. in einer Test- oder Entwicklungsumgebung, haben Sie möglicherweise nur einen einzelnen Stack-Knoten, d. h. Sie müssen keinen Load Balancer einbinden. In dieser Konfiguration konfigurieren Sie TLS sowohl auf den Portal- als auch auf den Stack-Knoten.
  • TLS auf einem Load Balancer für das Portal konfigurieren

    Eine oben nicht gezeigte Option ist die Verwendung eines Load Balancers vor dem Portalknoten. In dieser Konfiguration können Sie TLS auf dem Load Balancer und optional auf der Verbindung zwischen dem Load Balancer und dem Portal konfigurieren.

Prüfen, ob der TLS-Port geöffnet ist

Mit den folgenden Verfahren wird TLS auf dem Standardportalport 9000 und dem Stack-Knoten 8080 konfiguriert. Sie können diesen Port jedoch bei Bedarf ändern.

Unabhängig vom verwendeten Port müssen Sie dafür sorgen, dass der Port auf dem Knoten geöffnet ist. Mit dem folgenden Befehl können Sie beispielsweise Port 8443 öffnen:

$ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8443 -j ACCEPT --verbose

TLS im API BaaS-Stack konfigurieren

Standardmäßig ist TLS für den API BaaS-Stack deaktiviert. Anschließend greifen Sie über HTTP auf die BaaS API zu. Verwenden Sie dazu die IP-Adresse oder den DNS-Namen des Stack-Knotens und Port 8080. Beispiel:

http://stack_IP:8080

Alternativ können Sie den TLS-Zugriff auf die BaaS API so konfigurieren, dass Sie in folgender Form darauf zugreifen können:

https://stack_IP:8080

In diesem Beispiel konfigurieren Sie den TLS-Zugriff für die Verwendung von Port 8080. Port 8080 ist jedoch nicht erforderlich. Sie können den Stack so konfigurieren, dass ein anderer Port verwendet wird. Die einzige Anforderung ist, dass Ihre Firewall Traffic über den angegebenen Port zulässt.

Der Stack kann nur einen Anfragetyp (HTTP oder HTTPS) über einen einzelnen Port unterstützen. Wenn Sie also HTTPS-Zugriff auf Port 8080 konfigurieren, können Sie nicht über HTTP auf Port 8080 zugreifen. Wenn Sie den Stack so konfigurieren, dass er Port 8443 mit HTTPS verwendet, überwacht der Stack Port 8080 nicht mehr.

Gehen Sie so vor, um den TLS-Zugriff auf den Stack zu konfigurieren:

  1. Generieren Sie die JKS-Datei des Schlüsselspeichers, die Ihr TLS-Zertifikat und Ihren privaten Schlüssel enthält. Weitere Informationen finden Sie unter TLS/SSL für Edge On-Premises konfigurieren.
    Hinweis: Das Passwort für den Schlüsselspeicher und den Schlüssel muss identisch sein.
  2. Kopieren Sie die JKS-Datei des Schlüsselspeichers in ein Verzeichnis auf dem Stack-Knoten, z. B. /opt/apigee/customer/application. Das Verzeichnis muss für den Nutzer „apigee“ zugänglich sein.
  3. Ändern Sie die Inhaberschaft der JKS-Datei in den Nutzer „apigee“:
    > chown apigee:apigee /opt/apigee/customer/application/keystore.jks

    Dabei ist keystore.jks der Name Ihrer Schlüsselspeicherdatei.
  4. Bearbeiten Sie die Datei /opt/apigee/customer/application/usergrid.properties, um die folgenden Attribute festzulegen, einschließlich des Pfads zur JKS-Datei und des Passworts für den Schlüsselspeicher und den Schlüssel. Wenn diese Datei nicht vorhanden ist, erstellen Sie sie:
    tomcat-server_scheme=https
    tomcat-server_secure=true
    tomcat-server_ssl.enabled=true
    tomcat-server_keystore.type=JKS
    tomcat-server_keystore.file=/opt/apigee/customer/application/keystore.jks
    tomcat-server_keystore.password=password
    tomcat-server_keyalias=keystore_alias
    tomcat-server_clientauth.enabled=false
    tomcat-server_ssl.protocols=TLSv1,TLSv1.1,TLSv1.2
    # By default, TLS access uses port 8080.
    # Use this property to specify a different port.
    # tomcat-server_port=8080


    Warnung: Der Wert für password muss im Klartext angegeben werden. Daher sollten Sie usergrid.properties vor unbefugtem Zugriff schützen.

    Verwenden Sie das Attribut tomcat-server_keyalias, um den Keystore-Alias anzugeben. Sie legen den Schlüssel-Alias beim Erstellen des Schlüssels fest. Sie können ihn beispielsweise mit der Option -alias des Befehls keytool festlegen.

    Verwenden Sie tomcat-server_ssl.protocols, um die vom Stack unterstützten TLS-Protokolle festzulegen. Eine Liste der von Java 8 unterstützten Protokolle finden Sie unter http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#jssename.
  5. Konfigurieren Sie den Stack-Knoten:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid configure
  6. Starten Sie den BaaS-Stack neu:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  7. Prüfen Sie, ob TLS funktioniert, indem Sie den folgenden cURL-Befehl auf dem Stack-Knoten mit HTTPS ausführen:
    > curl -k https://localhost:8080/status -v

    Wenn TLS richtig konfiguriert ist, sollte eine Antwort mit Statusinformationen angezeigt werden.

    Wenn Sie den TLS-Zugriff über einen anderen Port als 8080 konfiguriert haben, ändern Sie den obigen Befehl so, dass der richtige Port verwendet wird.
  8. Wiederholen Sie den Vorgang für alle Stack-Knoten.
  9. Wenn Sie einen Load Balancer vor den Stack-Knoten haben, konfigurieren Sie den Load Balancer so, dass Anfragen an die Stack-Knoten über HTTPS gesendet werden. Weitere Informationen finden Sie in der Dokumentation zu Ihrem Load Balancer.

    Wenn das Portal direkte Anfragen an den Stack stellt, konfigurieren Sie das Portal so, dass es über HTTPS auf den Stack zugreift, wie im folgenden Abschnitt beschrieben.
  10. Führen Sie das unten beschriebene Verfahren unter „API BaaS-Stack-Knoten für TLS im Stack oder Portal konfigurieren“ aus, um sicherzustellen, dass der Stack-Knoten beim Generieren von Nutzerantworten die richtigen TLS-URLs hat.

Portal für den Zugriff auf den Stack über TLS konfigurieren

Das BaaS-Portal, das in einem Browser ausgeführt wird, funktioniert durch API-Aufrufe an den BaaS-Stack. Wenn Sie den BaaS-Stack für die Verwendung von TLS konfigurieren, müssen Sie auch das Portal so konfigurieren, dass diese Aufrufe über HTTPS erfolgen.

Eine API BaaS-Installation ist in der Regel so konfiguriert, dass entweder:

  • Load-Balancer zwischen Portal- und Stack-Knoten verwenden

    Konfigurieren Sie den Load-Balancer so, dass Anfragen an die Stack-Knoten über HTTPS gesendet werden. Weitere Informationen finden Sie in der Dokumentation zu Ihrem Load Balancer.

    In dieser Konfiguration kann das Portal je nach Konfiguration des Load Balancers über HTTP oder HTTPS auf den Load Balancer zugreifen. Wenn der Load Balancer TLS verwendet, gehen Sie wie unten beschrieben vor, um das Portal so zu konfigurieren, dass Anfragen an den Load Balancer über HTTPS gesendet werden.
  • Direkte Anfragen vom Portal an den Stack senden

    Konfigurieren Sie das Portal so, dass es über HTTPS auf den Stack zugreift, wie unten beschrieben.

So konfigurieren Sie das API BaaS-Portal für API-Aufrufe über HTTPS:

  1. Konfigurieren Sie den TLS-Zugriff auf den BaaS-Stack wie oben beschrieben oder auf dem Load Balancer für die Stack-Knoten, wie in der Dokumentation für Ihren Load Balancer beschrieben.
  2. Bearbeiten Sie /opt/apigee/customer/application/portal.properties, um das folgende Attribut festzulegen. Wenn diese Datei nicht vorhanden ist, erstellen Sie sie:
    baas.portal.config.overrideUrl=https://stackIP:port

    Geben Sie als Wert dieses Attributs die IP-Adresse oder den DNS-Namen und den Port des API-Stack-Knotens für eine Einzelknoteninstallation oder des Load-Balancers an, wenn Sie einen Load-Balancer vor den API BaaS-Stack-Knoten haben.
  3. Konfigurieren Sie den Portal-Knoten:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  4. Starten Sie das Portal mit dem folgenden Befehl neu:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  5. Wenn Sie beim Konfigurieren des TLS-Zugriffs auf den Stack oben ein selbst signiertes Zertifikat verwendet haben, lässt Ihr Browser möglicherweise keine Anfragen vom Portal an den Stack zu. Wenn im Browser ein Fehler angezeigt wird, dass der HTTPS-Zugriff auf den Stack nicht zulässig ist, rufen Sie die folgende URL in Ihrem Browser auf und fügen Sie eine Sicherheitsausnahme hinzu, um den Zugriff zu ermöglichen:
    https://stackIP:port/status

    Geben Sie die IP-Adresse oder den DNS-Namen und den Port des API-Stack-Knotens oder Load Balancers an.

TLS im API BaaS-Portal konfigurieren

Standardmäßig greifen Nutzer auf das Portal zu, indem sie unverschlüsselte HTTP-Anfragen über Port 9000 auf dem Portal-Server stellen. Sie können das Portal so konfigurieren, dass HTTPS verwendet wird, um die an das Portal und vom Portal gesendeten Daten zu verschlüsseln.

Standardmäßig greifen Sie über HTTP auf das Portal zu. Verwenden Sie dazu die IP-Adresse oder den DNS-Namen des Portalknotens und Port 9000. Beispiel:

http://portal_IP:9000

Alternativ können Sie den TLS-Zugriff auf das Portal so konfigurieren, dass Sie in folgender Form darauf zugreifen können:

https://portal_IP:9443

In diesem Beispiel konfigurieren Sie den TLS-Zugriff für die Verwendung von Port 9443. Port 9443 ist jedoch nicht erforderlich. Sie können das Portal so konfigurieren, dass ein anderer Port verwendet wird.

Das Portal kann nur einen Anfragetyp (HTTP oder HTTPS) über einen einzelnen Port unterstützen. Wenn Sie also HTTPS-Zugriff auf Port 9000 konfigurieren, können Sie nicht über HTTP auf Port 9000 zugreifen. Wenn Sie das Portal für die Verwendung von Port 9443 mit HTTPS konfigurieren, überwacht das Portal Port 9000 nicht mehr.

So konfigurieren Sie TLS für das Portal:

  1. Erstellen Sie eine Schlüsseldatei und eine Zertifikatsdatei im PEM-Format.
    Hinweis: Achten Sie darauf, dass für den Schlüssel oder das Zertifikat kein Passwort oder keine Passphrase festgelegt ist.
  2. Kopieren Sie die PEM-Dateien in ein Verzeichnis auf dem Portalknoten, z. B. /opt/apigee/customer/application. Das Verzeichnis muss für den Nutzer „apigee“ zugänglich sein.
  3. Ändern Sie die Inhaberschaft der PEM-Dateien in den Nutzer „apigee“:
    > chown apigee:apigee /opt/apigee/customer/application/*.PEM
  4. Bearbeiten Sie die Datei /opt/apigee/customer/application/portal.properties, um die folgenden Attribute festzulegen. Wenn diese Datei nicht vorhanden ist, erstellen Sie sie:
    baas.portal.ssl=on
    baas.portal.ssl.certificate=/opt/apigee/customer/application/defaultcert.pem
    baas.portal.ssl.key=/opt/apigee/customer/application/defaultkey.pem
    baas.portal.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2
    # Standardmäßig verwendet der TLS-Zugriff Port 9000.
    # Use this property to specify a different port.
    # baas.portal.listen=9000


    Verwenden Sie baas.portal.ssl.protocols, um die vom Portal unterstützten TLS-Protokolle festzulegen. Eine Liste der unterstützten Protokolle finden Sie in der Liste der von Nginx definierten SSL-Protokollnamen: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols.
  5. Konfigurieren Sie den Portal-Knoten:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  6. Starten Sie das Portal neu:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  7. Gehen Sie wie unten unter „API BaaS Stack-Knoten für TLS im Stack oder Portal konfigurieren“ beschrieben vor, um sicherzustellen, dass der Stack-Knoten die richtige TLS-URL für das Portal hat.

API BaaS-Knoten für TLS im Stack oder Portal konfigurieren

Wenn Sie einen Load Balancer vor den Stack- oder Portal-Knoten einfügen oder TLS direkt auf dem Portal- oder Stack-Knoten aktivieren, müssen Sie die Knoten mit den richtigen URLs für den Zugriff auf den Stack und das Portal konfigurieren. Die Stack-Knoten benötigen diese Informationen beispielsweise in folgenden Fällen:

  • Eine URL in Antworten in BaaS API-Anfragen einfügen.
  • Links in E-Mail-Vorlagen hinzufügen, wenn ein Passwort zurückgesetzt oder andere Benachrichtigungen gesendet werden.
  • Weiterleitung von Nutzern auf bestimmte Portalseiten.

Wenn Sie einen Load Balancer vor den Stack-Knoten verwenden oder TLS auf dem Stack-Knoten konfigurieren, legen Sie das folgende Attribut in /opt/apigee/customer/application/usergrid.properties fest:

usergrid-deployment_usergrid.api.url.base=http://localhost:8080

Ersetzen Sie http://localhost:8080 durch die URL des Load Balancers. Wenn der Load Balancer für die Verwendung von TLS konfiguriert ist, verwenden Sie das HTTPS-Protokoll. Sie müssen den Port nur angeben, wenn Sie einen nicht standardmäßigen Port verwenden, also einen anderen Port als Port 80 für HTTP und Port 443 für HTTPS.

Wenn Sie einen Load Balancer vor den Stack-Knoten verwenden, müssen Sie außerdem das folgende Attribut in /opt/apigee/customer/application/portal.properties festlegen:

baas.portal.config.overrideUrl=http://localhost:8080

Ersetzen Sie http://localhost:8080 durch die URL des Load Balancers für den Stack.

Wenn Sie einen Load Balancer vor dem Portalknoten verwenden oder TLS auf dem Stack-Knoten konfigurieren, legen Sie die folgenden Attribute in usergrid.properties fest:

usergrid-deployment_portal.url=http://localhost:9000

Ersetzen Sie http://localhost:9000 durch die URL des Load Balancers. Wenn der Load Balancer für die Verwendung von TLS konfiguriert ist, verwenden Sie das HTTPS-Protokoll. Sie müssen den Port nur angeben, wenn Sie einen nicht standardmäßigen Port verwenden, also einen anderen Port als Port 80 für HTTP und Port 443 für HTTPS.

Nachdem Sie usergrid.properties bearbeitet haben:

  1. Konfigurieren Sie den Stack-Knoten:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid configure
  2. Starten Sie den BaaS-Stack neu:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  3. Wenn Sie portal.properties geändert haben, konfigurieren Sie den Portal-Knoten:??
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  4. Starten Sie das BaaS-Portal neu:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart