TLS-Zugriff auf eine API für die private Cloud konfigurieren

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

Ein virtueller Host in Edge definiert die Domains und Ports, auf denen ein API-Proxy verfügbar gemacht wird, und folglich auch die URL, die Apps für den Zugriff auf einen API-Proxy verwenden.

Ein virtueller Host definiert außerdem, ob der Zugriff auf den API-Proxy über das HTTP-Protokoll oder über das verschlüsselte HTTPS-Protokoll mit TLS erfolgt. Wenn Sie einen virtuellen Host für die Verwendung von HTTPS und TLS konfigurieren, erstellen Sie einen virtuellen Host in Edge und konfigurieren ihn für die Verwendung eines Schlüsselspeichers und eines Truststores.

Weitere Informationen:

Voraussetzungen zum Erstellen eines virtuellen Hosts

Bevor Sie einen virtuellen Host erstellen, sollten Sie über die folgenden Informationen verfügen:

  • Der öffentliche Domainname des virtuellen Hosts. Sie sollten beispielsweise wissen, ob der öffentliche Name api.myCompany.com, myapi.myCompany.com usw. lautet. Diese Informationen werden beim Erstellen des virtuellen Hosts und beim Erstellen des DNS-Eintrags für den virtuellen Host verwendet.
  • Für One-Way-TLS müssen Sie einen Schlüsselspeicher erstellen, in dem der Schlüsselspeicher Folgendes enthält:
    • TLS-Zertifikat – entweder ein von einer Zertifizierungsstelle signiertes Zertifikat oder eine Zertifikatskette, bei der das letzte Zertifikat von einer Zertifizierungsstelle signiert ist.
    • Privater Schlüssel – Edge unterstützt Schlüsselgrößen bis zu 2048 Bit. Eine Passphrase ist optional.
  • Für Zwei-Wege-TLS benötigen Sie einen Schlüsselspeicher und einen Truststore, in dem das Clientzertifikat und optional die CA-Kette des Zertifikats gespeichert sind. Sie benötigen den Truststore auch dann, wenn das Zertifikat von einer Zertifizierungsstelle signiert ist.

Weitere Informationen zum Erstellen von Schlüsselspeichern und Truststores finden Sie unter Schlüsselspeicher und Truststores.

Konfiguration virtueller Hosts für TLS

Um einen virtuellen Host zu erstellen, erstellen Sie ein XML-Objekt, das den virtuellen Host definiert. Im folgenden XML-Objekt wird mit dem Element <SSLInfo> ein virtueller Host für eine Einweg-TLS-Konfiguration über HTTPS definiert:

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <OCSPStapling>off</OCSPStapling>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://myTestKeystoreRef</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
</VirtualHost>

In diesem Beispiel ist das Element <Enabled> auf „true“ gesetzt, um One-Way-TLS zu aktivieren. Die Elemente <KeyStore> und <KeyAlias> geben den Schlüsselspeicher und den Schlüssel an, der von der TLS-Verbindung verwendet wird.

Legen Sie zum Aktivieren von Zwei-Wege-TLS das Element <ClientAuthEnabled> auf true fest und geben Sie mit dem Element <TrustStore> einen Truststore an. Der Truststore enthält das Zertifikat des Clients und optional die Zertifizierungsstellenkette des Zertifikats.

Festlegen, wie der Schlüsselspeicher- und Truststore-Name im virtuellen Host angegeben werden

Im obigen Beispiel für einen virtuellen Host haben Sie den Schlüsselspeicher mithilfe einer Referenz angegeben. Ein Verweis ist eine Variable, die den Namen des Schlüsselspeichers enthält, anstatt den Schlüsselspeichernamen direkt anzugeben.

Der Vorteil eines Verweises besteht darin, dass Sie den Wert des Verweises ändern können, um den vom virtuellen Host verwendeten Schlüsselspeicher zu ändern. Dies liegt normalerweise daran, dass das Zertifikat im aktuellen Schlüsselspeicher in naher Zukunft abläuft. Zum Ändern des Referenzwerts müssen Sie den Edge Router nicht neu starten.

Alternativ können Sie im virtuellen Host einen literalen Schlüsselspeichernamen verwenden. Wenn Sie jedoch den virtuellen Host ändern, um den Schlüsselspeichernamen zu ändern, müssen Sie die Edge Router neu starten.

Einschränkungen bei der Verwendung von Verweisen auf Schlüsselspeicher und Truststore

Beachten Sie die folgende Einschränkung, wenn Sie Verweise auf Schlüsselspeicher und Truststores verwenden:

  • Sie können Schlüsselspeicher- und Truststore-Referenzen nur in virtuellen Hosts verwenden, wenn Sie SNI unterstützen und SSL auf den Apigee-Routern beenden.
  • Wenn sich vor den Apigee-Routern ein Load-Balancer befindet und Sie TLS auf dem Load-Balancer beenden, können Sie keine Keystore- und Truststore-Verweise in virtuellen Hosts verwenden.

Vorhandenen virtuellen Host so ändern, dass Verweise auf den Schlüsselspeicher und den Truststore verwendet werden

Apigee empfiehlt dringend, dass virtuelle Hosts Verweise auf Schlüsselspeicher und Truststores verwenden. Mit Referenzen können Sie den vom virtuellen Host verwendeten Schlüsselspeicher und Truststore ändern, ohne die Edge Router neu starten zu müssen.

Wenn Ihre virtuellen Hosts derzeit so konfiguriert sind, dass sie den literalen Namen des Schlüsselspeichers oder Truststores verwenden, können Sie sie in Verweise konvertieren. Aktualisieren Sie dazu den virtuellen Host, um Verweise zu verwenden, und starten Sie dann die Edge Router neu.

TLS-Chiffren und -Protokolle für Edge 4.15.07 und frühere Versionen festlegen

Wenn Sie Edge Version 4.15.07 und älter verwenden, legen Sie das TLS-Protokoll und die vom virtuellen Host verwendeten Chiffren mithilfe der untergeordneten Tags <Ciphers> und <Protocols> des Tags <SSLInfo> fest. Diese Tags werden in der folgenden Tabelle beschrieben.

Beispiel:

    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>myTestKeystore</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
        <SSLInfo>
            <Enabled>true</Enabled>
            <ClientAuthEnabled>false</ClientAuthEnabled>
            <KeyStore>myTestKeystore</KeyStore>
            <KeyAlias>myKeyAlias</KeyAlias>
            <Ciphers>
                <Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</Cipher>
                <Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</Cipher>
            </Ciphers>
            <Protocols>
                <Protocol>TLSv1.2</Protocol>
            </Protocols>
        </SSLInfo>
   </SSLInfo>

Das <Cipher>-Tag verwendet den Java- und JSSE-Namen der Chiffre. Für Java 8 lesen Sie beispielsweise http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites.

TLS-Verschlüsselungen und -Protokolle für Edge 4.16.01 bis 4.16.09 angeben

In Edge 4.16.01 bis 4.16.09 legen Sie die Standardchiffren und Protokolle für virtuelle Hosts global auf dem Router fest. Diese Standardeinstellungen gelten dann für alle virtuellen Hosts.

Verwenden Sie Tokens, um die Standardprotokolle und -chiffren anzugeben:

  • Verwenden Sie das Token conf_load_balancing_load.balancing.driver.server.ssl.protocols, um die Standardprotokolle anzugeben.
  • Verwenden Sie das Token conf_load_balancing_load.balancing.driver.server.ssl.ciphers, um die Standardchiffren für den Router anzugeben.

Der Standardwert des conf_load_balancing_load.balancing.driver.server.ssl.protocols-Tokens ist:

conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2

Mit dieser Einstellung wird angegeben, dass der Router die TLS-Versionen 1.0, 1.1 und 1.2 unterstützt. Geben Sie eine durch Leerzeichen getrennte Liste von Werten für das Token an.

Der Standardwert des conf_load_balancing_load.balancing.driver.server.ssl.ciphers-Tokens ist:

conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES

Diese Einstellung gibt Folgendes an:

  • Schlüssellänge von mindestens 128 Bit erforderlich (HIGH).
  • Chiffren ohne Authentifizierung ausschließen (!aNULL)
  • Chiffresammlungen mithilfe von MD5 ausschließen (!MD5)
  • Chiffresammlungen mit DH ausschließen (einschließlich anonymem DH, sitzungsspezifischem DH und festem DH) UND dreifach DES (!DH+3DES)
  • Chiffresammlungen mithilfe von RSA-Schlüsselaustausch UND dreifach DES ausschließen (!RSA+3DES)

Informationen zur Syntax und zu den Werten, die für dieses Token zulässig sind, finden Sie unter OpenSSL-Chiffren. Beachten Sie, dass für dieses Token die OpenSSL-Chiffrenamen wie AES128-SHA256 und nicht die Java/JSSE-Chiffrennamen wie TLS_RSA_WITH_AES_128_CBC_SHA256 verwendet werden.

So legen Sie das Token für den Router fest:

  1. Bearbeiten Sie die Datei /opt/apigee/customer/application/router.properties. Wenn diese Datei nicht vorhanden ist, erstellen Sie sie.
  2. Legen Sie das Token conf_load_balancing_load.balancing.driver.server.ssl.ciphers fest. Wenn Sie beispielsweise nur TLSv1.2 angeben und Cipher Suites mit vorinstallierten Schlüsseln ausschließen möchten, fügen Sie !PSK hinzu:
    conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1.2
    conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES:!PSK
  3. Achten Sie darauf, dass die Datei router.properties zu Apigee gehört:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  4. Starten Sie den Edge Router neu:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  5. Prüfen Sie den Wert des Tokens:
    /opt/apigee/apigee-service/bin/apigee-service edge-router configure -search conf_load_balancing_load.balancing.driver.server.ssl.ciphers

Parameter für virtuelle TLS-Hosts für Edge-Version 4.17.01 und höher festlegen

Wenn Sie Edge Version 4.17.01 und höher verwenden, können Sie mit dem untergeordneten Tag <Properties> des Tags <VirtualHost> einige TLS-Attribute für einen einzelnen virtuellen Host festlegen, z. B. das TLS-Protokoll und die Verschlüsselung. Eine Beschreibung dieser Tags finden Sie unter Referenz zu virtuellen Hostattributen.

Beispiel:

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <OCSPStapling>off</OCSPStapling>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://myTestKeystoreRef</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
    <Properties>
        <Property name="proxy_read_timeout">50</Property>
        <Property name="keepalive_timeout">300</Property>
        <Property name="proxy_request_buffering">off</Property>
        <Property name="proxy_buffering">off</Property>
        <Property name="ssl_protocols">TLSv1.2 TLSv1.1</Property>
        <Property name="ssl_ciphers">HIGH:!aNULL:!MD5:!DH+3DES:!kEDH</Property>
    </Properties>
</VirtualHost>

Informationen zur Syntax und zu den Werten, die für das ssl_ciphers-Token zulässig sind, findest du unter OpenSSL-Chiffren. Beachten Sie, dass für dieses Token die OpenSSL-Chiffrenamen wie AES128-SHA256 und nicht die Java/JSSE-Chiffrennamen wie TLS_RSA_WITH_AES_128_CBC_SHA256 verwendet werden.

Virtuellen Host erstellen, der HTTPS verwendet

In diesem Beispiel wird der Schlüsselspeicher mithilfe einer Referenz auf dem virtuellen Host angegeben. Mit einem Verweis können Sie den Schlüsselspeicher ändern, ohne Router neu starten zu müssen.

So erstellen Sie den virtuellen Host:

  1. Erstellen und konfigurieren Sie einen Schlüsselspeicher mit dem Namen myTestKeystore. Gehen Sie dazu wie hier beschrieben vor: Schlüsselspeicher und Truststores. Achten Sie darauf, dass der Schlüsselspeicher den Aliasnamen myKeyAlias für das Zertifikat und den privaten Schlüssel verwendet.
  2. Verwenden Sie den folgenden POST API-Aufruf, um den Verweis mit dem Namen keystoreref für den oben erstellten Schlüsselspeicher zu erstellen:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
      -d '<ResourceReference name="keystoreref">
        <Refers>myTestKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
      </ResourceReference>'
      -u email:password
    

    Der Verweis gibt den Namen des Schlüsselspeichers und den Referenztyp als KeyStore an.

    Verwenden Sie den folgenden GET API-Aufruf, um die Referenz aufzurufen:

    curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password
    
  3. Erstellen Sie den virtuellen Host mithilfe der Create a Virtual Host API, wobei <ms-IP> die IP-Adresse oder der Domainname des Management Server-Knotens ist.

    Achten Sie darauf, die richtige Schlüsselspeicherreferenz und Schlüsselalias anzugeben:

    curl -X POST -H "Content-Type:application/xml" \
      http://<ms-IP>:8080/v1/o/{org_name}/environments/{env_name}/virtualhosts \
      -d '<VirtualHost  name="newTLSTrustStore2">
        <HostAliases>
          <HostAlias>apiTLS.myCompany.com</HostAlias>
        </HostAliases>
        <Interfaces/>
        <Port>9005</Port>
        <OCSPStapling>off</OCSPStapling>
        <SSLInfo>
          <Enabled>true</Enabled>
          <ClientAuthEnabled>false</ClientAuthEnabled>
          <KeyStore>ref://keystoreref</KeyStore>
          <KeyAlias>myKeyAlias</KeyAlias>
        </SSLInfo>
      </VirtualHost>' \
      -u email:password
  4. Erstellen Sie einen DNS-Eintrag für den virtuellen Host, der mit dem Hostalias übereinstimmt.
  5. Wenn Sie bereits API-Proxys haben, fügen Sie den virtuellen Host dem <HTTPConnection>-Element im ProxyEndpoint hinzu. Der virtuelle Host wird automatisch allen neuen API-Proxys hinzugefügt.

    Weitere Informationen finden Sie unter API-Proxy nach dem Erstellen eines virtuellen Hosts aktualisieren unter Informationen zu virtuellen Hosts.

Nachdem Sie einen API-Proxy aktualisiert und den DNS-Eintrag für den Hostalias erstellt haben, können Sie wie unten dargestellt auf den API-Proxy zugreifen:

https://apiTLS.myCompany.com/v1/{project-base-path}/{resource-path}

Beispiel:

https://apiTLS.myCompany.com/v1/weather/forecastrss?w=12797282

Verweise auf einen Schlüsselspeicher oder Truststore erstellen und ändern

Sie können den virtuellen Host optional so konfigurieren, dass stattdessen ein Verweis auf den Schlüsselspeicher oder Truststore verwendet wird. Der Vorteil eines Verweises besteht darin, dass Sie den Verweis so aktualisieren können, dass er auf einen anderen Schlüsselspeicher oder Truststore verweist, um das TLS-Zertifikat zu aktualisieren, ohne einen Router neu starten zu müssen.

Im Folgenden sehen Sie beispielsweise einen virtuellen Host, der einen Verweis auf den Schlüsselspeicher verwendet:

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>apiTLS.myCompany.com</HostAlias>
    </HostAliases>
    <Interfaces/>
    <Port>9006</Port>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://keystoreref</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
</VirtualHost>

Erstellen Sie mit dem folgenden POST API-Aufruf den Verweis mit dem Namen keystoreref:

curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
  -d '<ResourceReference name="keystoreref">
    <Refers>myTestKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
  </ResourceReference>'
  -u email:password

Die Referenz gibt den Namen des Schlüsselspeichers und seinen Typ an.

Verwenden Sie den folgenden GET API-Aufruf, um die Referenz aufzurufen:

curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password

Verwenden Sie den folgenden PUT-Aufruf, um später die Referenz so zu ändern, dass sie auf einen anderen Schlüsselspeicher verweist, damit der Alias denselben Namen hat:

curl -X PUT -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references/keystoreref \
  -d '<ResourceReference name="keystoreref">
    <Refers>myNewKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
  </ResourceReference>'
  -u email:password