Sie sehen sich die Apigee Edge-Dokumentation an.
Sehen Sie sich die Apigee X-Dokumentation an.
Ein virtueller Host in Edge definiert die Domains und Ports, auf denen ein API-Proxy verfügbar gemacht wird, und damit auch die URL, über die Apps auf einen API-Proxy zugreifen.
Ein virtueller Host definiert auch, ob auf den API-Proxy über das HTTP-Protokoll oder das verschlüsselte HTTPS-Protokoll zugegriffen wird, das TLS verwendet. Wenn Sie einen virtuellen Host zur Verwendung von HTTPS und TLS konfigurieren, erstellen Sie einen virtuellen Host in Edge und konfigurieren den virtuellen Host so, dass er einen Schlüsselspeicher und einen Truststore verwendet.
Weitere Informationen:
- TLS/SSL
- TLS mit Edge verwenden
- Informationen zu virtuellen Hosts
- Virtuelle Hosts für die private Cloud konfigurieren
- Referenz für die virtuelle Hosteigenschaft
- Schlüsselspeicher und Truststores
So erstellen Sie einen virtuellen Host
Bevor Sie einen virtuellen Host erstellen, sollten Sie folgende Informationen haben:
- Der öffentlich sichtbare Domainname des virtuellen Hosts. Beispielsweise sollten Sie wissen, ob der öffentlich sichtbare Name
api.myCompany.com
,myapi.myCompany.com
usw. ist. Diese Informationen werden beim Erstellen des virtuellen Hosts und auch beim Erstellen des DNS-Eintrags für den virtuellen Host verwendet. -
Für Einweg-TLS müssen Sie einen Schlüsselspeicher erstellen, in dem der Schlüsselspeicher Folgendes enthält:
- TLS-Zertifikat – entweder ein von einer Zertifizierungsstelle (CA) signiertes Zertifikat oder eine Kette von Zertifikaten, bei der das letzte Zertifikat von einer Zertifizierungsstelle signiert ist.
- Privater Schlüssel: Edge unterstützt Schlüsselgrößen bis zu 2.048 Bit. Eine Passphrase ist optional.
- Für Zwei-Wege-TLS benötigen Sie einen Schlüsselspeicher und einen Truststore, in dem das Zertifikat und optional die CA-Kette des Zertifikats aufbewahrt werden. 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.
Virtuelle Hostkonfiguration für TLS
Erstellen Sie zum Erstellen eines virtuellen Hosts 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, und die Elemente <KeyStore>
und <KeyAlias>
geben den Schlüsselspeicher und Schlüssel an, die von der TLS-Verbindung verwendet werden.
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 Clientzertifikats und optional die CA-Kette des Zertifikats.
Festlegen, wie der Schlüsselspeicher- und Truststore-Name im virtuellen Host angegeben wird
Im Beispiel oben mit dem virtuellen Host haben Sie den Schlüsselspeicher mithilfe einer Referenz angegeben. Eine Referenz ist eine Variable, die den Namen des Schlüsselspeichers enthält, anstatt den Namen des Schlüsselspeichers direkt anzugeben.
Der Vorteil der Verwendung einer Referenz besteht darin, dass Sie den Wert der Referenz ändern können, um den vom virtuellen Host verwendeten Schlüsselspeicher zu ändern. Dies liegt in der Regel daran, dass das Zertifikat im aktuellen Schlüsselspeicher bald abläuft. Sie müssen den Edge-Router nicht neu starten, wenn Sie den Wert der Referenz ändern.
Alternativ können Sie einen Literalschlüsselspeichernamen im virtuellen Host verwenden. Wenn Sie jedoch den virtuellen Host jemals ä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
Wenn Sie Verweise auf Schlüsselspeicher und Truststores verwenden, müssen Sie die folgende Einschränkung berücksichtigen:
- Sie können Keystore- und Truststore-Referenzen in virtuellen Hosts nur verwenden, wenn Sie SNI unterstützen und SSL auf den Apigee-Routern beenden.
- Wenn Sie einen Load-Balancer vor den Apigee-Routern haben und TLS auf dem Load-Balancer beenden, können Sie keine Schlüsselspeicher- und Truststore-Referenzen auf virtuellen Hosts verwenden.
Vorhandenen virtuellen Host ändern, um Verweise auf den Schlüsselspeicher und den Truststore zu verwenden
Apigee empfiehlt dringend, virtuelle Hosts auf Referenzspeicher und Truststores zu 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 Literalnamen des Schlüsselspeichers oder Truststores verwenden, können Sie sie für die Verwendung von Referenzen 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 niedriger festlegen
Wenn Sie Edge-Version 4.15.07 und niedriger verwenden, legen Sie das vom virtuellen Host verwendete TLS-Protokoll und die Chiffren mithilfe der untergeordneten Tags <Ciphers>
und <Protocols>
des Tags <SSLInfo>
fest. Die Tags sind 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 Tag <Cipher>
verwendet den Java- und den JSSE-Namen der Chiffre. Für Java 8 finden Sie beispielsweise
http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ifsuites.
TLS-Chiffren 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 standardmäßigen Chiffren 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 Standardverschlüsselungen 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 festgelegt, dass der Router die TLS-Versionen 1.0, 1.1 und 1.2 unterstützt. Geben Sie für das Token eine durch Leerzeichen getrennte Liste mit Werten 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
Mit dieser Einstellung wird Folgendes festgelegt:
- Schlüssellänge von mindestens 128 Bit erforderlich (
HIGH
). - Chiffren ohne Authentifizierung ausschließen (
!aNULL
) - Cipher Suites mit MD5 (
!MD5
) ausschließen - Ausschluss von Cipher Suites mit DH (einschließlich anonymer DH, sitzungsspezifischem DH und festem DH) UND dreifachem DES (
!DH+3DES
) - Cipher Suites mit RSA-Schlüsselaustausch UND dreifachem DES (
!RSA+3DES
) ausschließen
Informationen zu der Syntax und den Werten für dieses Token finden Sie unter OpenSSL-Chiffren. Beachten Sie, dass bei diesem Token die OpenSSL-Ciphernamen wie AES128-SHA256 und nicht die Java/JSSE-Ciphernamen wie TLS_RSA_WITH_AES_128_CBC_SHA256 verwendet werden.
So legen Sie das Token für den Router fest:
- Bearbeiten Sie die Datei
/opt/apigee/customer/application/router.properties
. Wenn die Datei nicht vorhanden ist, erstellen Sie sie. - 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
- Achten Sie darauf, dass die Datei
router.properties
Eigentum von Apigee ist:chown apigee:apigee /opt/apigee/customer/application/router.properties
- Starten Sie den Edge-Router neu:
/opt/apigee/apigee-service/bin/apigee-service edge-router restart
- 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
Virtuelle TLS-Hostparameter für Edge-Version 4.17.01 und höher festlegen
Wenn Sie Edge-Version 4.17.01 oder höher verwenden, können Sie mit dem untergeordneten Tag <Properties>
des <VirtualHost>
-Tags einige TLS-Attribute für einen einzelnen virtuellen Host wie TLS-Protokoll und -Verschlüsselung festlegen. Diese Tags werden in der Referenz zu virtuellen Hosteigenschaften beschrieben.
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 zu der Syntax und den Werten, die für das ssl_ciphers
-Token zulässig sind, finden Sie unter OpenSSL-Chiffren.
Beachten Sie, dass bei diesem Token die OpenSSL-Ciphernamen wie AES128-SHA256 und nicht die Java/JSSE-Ciphernamen 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 für den virtuellen Host festgelegt. Mit einem Verweis können Sie den Schlüsselspeicher ändern, ohne Router neu starten zu müssen.
So erstellen Sie den virtuellen Host:
- Erstellen und konfigurieren Sie einen Schlüsselspeicher namens myTestKeystore mit der hier beschriebenen Vorgehensweise: Keystores und Truststores. Der Schlüsselspeicher muss einen Aliasnamen von myKeyAlias für das Zertifikat und den privaten Schlüssel verwenden.
-
Verwenden Sie den folgenden POST API-Aufruf, um die Referenz namens 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
Die Referenz 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
Erstellen Sie den virtuellen Host mit der Virtual Host API erstellen, wobei
<ms-IP>
die IP-Adresse oder der Domainname des Management Server-Knotens ist.Achten Sie darauf, die richtige Keystore-Referenz und den Schlüssel-Alias 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
- Erstellen Sie einen DNS-Eintrag für den virtuellen Host, der dem Host-Alias entspricht.
Wenn Sie vorhandene API-Proxys haben, fügen Sie den virtuellen Host zum Element
<HTTPConnection>
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 Virtuelle Hosts.
Nachdem Sie einen API-Proxy aktualisiert haben, um den virtuellen Host zu verwenden, und den DNS-Eintrag für den Host-Alias erstellt haben, können Sie wie unten gezeigt 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 auch so konfigurieren, dass stattdessen eine Referenz zum Schlüsselspeicher oder Truststore verwendet wird. Der Vorteil einer Referenz besteht darin, dass Sie die Referenz so aktualisieren können, dass sie auf einen anderen Schlüsselspeicher oder Truststore verweist, um das TLS-Zertifikat zu aktualisieren, ohne einen Router neu starten zu müssen.
Das folgende Beispiel zeigt einen virtuellen Host, der auf den Schlüsselspeicher verweist:
<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 die Referenz 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