Schlüsselspeicher und Truststores für die Private Cloud Version 4.17.09 und niedriger erstellen

Sie lesen gerade die Apigee Edge-Dokumentation.
Zur Apigee X-Dokumentation.
info

In diesem Dokument wird beschrieben, wie Sie Schlüsselspeicher und Truststores für Edge für die Private Cloud, Version 4.17.09 und früher, erstellen, ändern und löschen.

Schlüsselspeicher und Truststores

Schlüsselspeicher und Truststores definieren Repositories von Sicherheitszertifikaten, die für die TLS Verschlüsselung verwendet werden. Der Hauptunterschied zwischen den beiden besteht darin, wo sie im TLS-Handshake-Prozess verwendet werden:

  • Ein Schlüsselspeicher enthält ein TLS-Zertifikat und einen privaten Schlüssel, um die Entität während des TLS-Handshakes zu identifizieren.

    Bei der unidirektionalen TLS-Authentifizierung stellt der Schlüsselspeicher des Servers das Zertifikat des Servers (öffentliches Zertifikat) dem Client zur Verfügung, wenn sich ein Client mit dem TLS-Endpunkt auf dem Server verbindet. Der Client validiert dieses Zertifikat dann bei einer Zertifizierungsstelle (Certificate Authority, CA), z. B. Symantec oder VeriSign.

    Bei der bidirektionalen TLS-Authentifizierung verwalten sowohl der Client als auch der Server einen Schlüsselspeicher mit ihrem eigenen Zertifikat und privaten Schlüssel, die für die gegenseitige Authentifizierung verwendet werden.
  • Ein truststore enthält Zertifikate, die zum Überprüfen von Zertifikaten verwendet werden, die im Rahmen des TLS-Handshakes empfangen wurden.

    Bei der unidirektionalen TLS-Authentifizierung ist ein Truststore nicht erforderlich, wenn das Zertifikat von einer gültigen Zertifizierungsstelle signiert wurde. Wenn das von einem TLS-Client empfangene Zertifikat von einer gültigen Zertifizierungsstelle signiert wurde, sendet der Client eine Anfrage an die Zertifizierungsstelle, um das Zertifikat zu authentifizieren. Ein TLS-Client verwendet in der Regel einen Truststore, um selbstsignierte Zertifikate zu validieren, die vom TLS-Server empfangen wurden, oder Zertifikate, die nicht von einer vertrauenswürdigen Zertifizierungsstelle signiert wurden. In diesem Fall füllt der Client seinen Truststore mit Zertifikaten, denen er vertraut. Wenn der Client dann ein Serverzertifikat empfängt, wird das eingehende Zertifikat mit den Zertifikaten im Truststore verglichen.

    Beispiel: Ein TLS-Client stellt eine Verbindung zu einem TLS-Server her, auf dem ein selbstsigniertes Zertifikat verwendet wird. Da es sich um ein selbstsigniertes Zertifikat handelt, kann der Client es nicht bei einer Zertifizierungsstelle validieren. Stattdessen lädt der Client das selbstsignierte Zertifikat des Servers in seinen Truststore. Wenn der Client dann versucht, eine Verbindung zum Server herzustellen, verwendet er seinen Truststore, um das vom Server empfangene Zertifikat zu validieren.

    Bei der bidirektionalen TLS-Authentifizierung können sowohl der TLS-Client als auch der TLS-Server einen Truststore verwenden. Ein Truststore ist erforderlich, wenn die bidirektionale TLS-Authentifizierung ausgeführt wird und Edge als TLS-Server fungiert.

Zertifikate können von einer Zertifizierungsstelle ausgestellt werden oder sie können mit dem von Ihnen generierten privaten Schlüssel selbstsigniert werden. Wenn Sie Zugriff auf eine Zertifizierungsstelle haben, folgen Sie der Anleitung Ihrer Zertifizierungsstelle zum Generieren von Schlüsseln und Ausstellen von Zertifikaten. Wenn Sie keinen Zugriff auf eine Zertifizierungsstelle haben, können Sie mit einem der vielen öffentlich verfügbaren kostenlosen Tools wie OpenSSL ein selbstsigniertes Zertifikat generieren.

Schlüsselspeicher und Truststore in Edge implementieren

In Edge enthält ein Schlüsselspeicher eine oder mehrere JAR-Dateien, wobei die JAR-Datei Folgendes enthält:

  • TLS-Zertifikat als PEM-Datei: entweder ein von einer Zertifizierungsstelle (CA) signiertes Zertifikat, eine Kette von Zertifikaten, bei der das letzte Zertifikat von einer Zertifizierungsstelle signiert wurde, oder ein selbstsigniertes Zertifikat.
  • Privater Schlüssel als PEM-Datei. Edge unterstützt Schlüsselgrößen von bis zu 2048 Bit. Eine Passphrase ist optional.

Ein Truststore ähnelt einem Schlüsselspeicher, enthält aber nur Zertifikate als PEM-Datei und keine privaten Schlüssel.

Wenn das Zertifikat Teil einer Kette ist, müssen der Schlüsselspeicher/Truststore alle Zertifikate in der Kette enthalten, entweder als einzelne PEM-Dateien oder als eine einzelne Datei. Wenn Sie eine einzelne Datei verwenden, müssen die Zertifikate in der richtigen Reihenfolge sein. Das erste Zertifikat in der Datei ist das für TLS verwendete Zertifikat, gefolgt von der Kette der Zertifikate in der richtigen Reihenfolge bis zum Zertifikat der Zertifizierungsstelle. Zwischen den einzelnen Zertifikaten in der Datei muss eine leere Zeile eingefügt werden.

Edge bietet eine API, mit der Sie Schlüsselspeicher und Truststores erstellen können. Die APIs sind identisch. Der Unterschied besteht darin, dass Sie beim Erstellen eines Schlüsselspeichers eine JAR-Datei übergeben, die das Zertifikat und den privaten Schlüssel enthält. Wenn Sie einen Truststore erstellen, übergeben Sie nur das Zertifikat als PEM-Datei.

Format der Zertifikats- und Schlüsseldateien

In den Beispielen in diesem Dokument sind das TLS-Zertifikat und der Schlüssel als PEM-Dateien definiert, die dem X.509-Format entsprechen. Wenn Ihr Zertifikat oder privater Schlüssel nicht durch eine PEM-Datei definiert ist, können Sie es mit Dienstprogrammen wie OpenSSL in eine PEM-Datei konvertieren.

Viele .crt- und .key-Dateien sind jedoch bereits im PEM-Format. Wenn diese Dateien Text Dateien sind und in Folgendem eingeschlossen sind:

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

oder

-----BEGIN ENCRYPTED PRIVATE KEY-----
-----END ENCRYPTED PRIVATE KEY-----

Dann sind die Dateien mit dem PEM-Format kompatibel und Sie können sie in einem Schlüsselspeicher oder Truststore verwenden, ohne sie in eine PEM-Datei zu konvertieren.

Wenn Sie eine Zertifikatskette haben und diese in einem Schlüsselspeicher oder Truststore verwenden möchten, dann können Sie alle Zertifikate in einer einzelnen PEM-Datei kombinieren, wobei zwischen den einzelnen Zertifikaten eine neue Zeile eingefügt wird. Die Zertifikate müssen in der richtigen Reihenfolge sein und das letzte Zertifikat muss ein Root-Zertifikat oder ein Zwischenzertifikat sein, das von einem Root-Zertifikat signiert wurde:

-----BEGIN CERTIFICATE-----
(Your Primary TLS certificate)
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
(Intermediate certificate)
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
(Root certificate or intermediate certificate signed by a root certificate)
-----END CERTIFICATE-----

Details zu einem vorhandenen Schlüsselspeicher abrufen

Prüfen Sie Ihre Umgebung auf vorhandene Schlüsselspeicher. Verwenden Sie dazu die API zum Auflisten von Schlüsselspeichern und Truststores:

curl -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores \
-u email:password

Für Cloud-Kunden wird in den Test- und Produktionsumgebungen ein Standardschlüsselspeicher für kostenlose Testorganisationen bereitgestellt. Für beide Umgebungen sollten die folgenden Ergebnisse für diesen Aufruf angezeigt werden:

[ "freetrial" ]

Sie können diesen Standardschlüsselspeicher verwenden, um Ihre APIs zu testen und in der Produktion bereitzustellen. In der Regel erstellen Sie jedoch vor der Bereitstellung in der Produktion einen eigenen Schlüsselspeicher mit Ihrem eigenen Zertifikat und Schlüssel.

Für Private Cloud-Kunden ist das zurückgegebene Array leer, bis Sie Ihren ersten Schlüsselspeicher erstellen.

Prüfen Sie den Inhalt des Schlüsselspeichers mit der API zum Abrufen eines Schlüsselspeichers oder Truststores. Für einen Cloud-Kunden sollte ein einzelnes Server-TLS Zertifikat angezeigt werden – das Standardzertifikat, das Apigee Edge für kostenlose Testkonten bereitstellt.

curl https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/freetrial \
-u email:password

Die Antwort sollte so aussehen:

{
 "certs" : [ "wildcard.apigee.net.crt" ],
 "keys" : [ "freetrial" ],
 "name" : "freetrial"
}

Sie können diese Informationen auch in der Edge Management UI aufrufen:

  1. Melden Sie sich in der Edge Management UI unter https://enterprise.apigee.com (Cloud) oder http://<ms-ip>:9000 (lokal) an. Dabei ist <ms-ip> die IP-Adresse des Management Server-Knotens.
  2. Wählen Sie im Menü der Edge Management UI Admin > TLS-Zertifikate aus.

Details zum TLS-Zertifikat abrufen

Mit der API zum Abrufen von Zertifikatsdetails aus einem Schlüsselspeicher oder Truststore können Sie Details zu TLS-Zertifikaten in dem Schlüsselspeicher aufrufen, z. B. Ablaufdatum und Aussteller. Rufen Sie zuerst den Namen des Zertifikats ab, an dem Sie interessiert sind. In diesem Beispiel werden Informationen für den Schlüsselspeicher „freetrial“ abgerufen.

curl https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/freetrial \
-u email:password

Beispielantwort:

{
 "certs" : [ "wildcard.apigee.net.crt" ],
 "keys" : [ "freetrial" ],
 "name" : "freetrial"
}

Verwenden Sie dann den Wert des Attributs „certs“, um die Zertifikatsdetails abzurufen:

curl https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/freetrial/certs/wildcard.apigee.net.crt \
-u email:password

Beispielantwort:

{
 "certInfo" : [ {
   "expiryDate" : "Wed, 23 Apr 2014 20:50:02 UTC",
   "isValid" : "Yes",
   "issuer" : "CN=Go Daddy Secure Certificate Authority - G2, OU=http://certs.godaddy.com/repository/, O=&quot;GoDaddy.com, Inc.&quot;, L=Scottsdale, ST=Arizona, C=US",
   "subject" : CN=*.example.apigee.net, OU=Domain Control Validated",
   "subjectAlternativeNames" : ["*.example.apigee.net","*.example.apigee.net" ],
   "validFrom" : "Tue, 15 Apr 2014 09:17:03 UTC",
   "version" : 3
 } ],
 "name" : "example.apigee.net.crt"
}

Sie können diese Informationen auch in der Edge Management UI aufrufen:

  1. Melden Sie sich in der Edge Management UI unter https://enterprise.apigee.com (Cloud) oder http://<ms-ip>:9000 (lokal) an. Dabei ist <ms-ip> die IP-Adresse des Management Server-Knotens.
  2. Wählen Sie im Menü der Edge Management UI Admin > TLS-Zertifikate aus.

In der Edge UI können Sie angeben, wie lange im Voraus Edge darauf hinweisen soll, dass ein Zertifikat abläuft. Standardmäßig werden in der UI alle Zertifikate hervorgehoben, die in den nächsten 10 Tagen ablaufen.

Schlüsselspeicher erstellen

Ein Schlüsselspeicher ist spezifisch für eine Umgebung in Ihrer Organisation, z. B. die Test- oder Produktionsumgebung . Wenn Sie den Schlüsselspeicher also in einer Testumgebung testen möchten, bevor Sie ihn in Ihrer Produktionsumgebung bereitstellen, müssen Sie ihn in beiden Umgebungen erstellen.

Das Erstellen eines Schlüsselspeichers ist ein zweistufiger Prozess:

  1. Erstellen Sie eine JAR-Datei mit Ihrem Zertifikat und privaten Schlüssel.
  2. Erstellen Sie den Schlüsselspeicher und laden Sie die JAR-Datei hoch.

JAR-Datei mit Zertifikat und privatem Schlüssel erstellen

Erstellen Sie eine JAR-Datei mit Ihrem privaten Schlüssel, Zertifikat und einem Manifest. Die JAR-Datei muss die folgenden Dateien und Verzeichnisse enthalten:

/META-INF/descriptor.properties
myCert.pem
myKey.pem

Erstellen Sie im Verzeichnis mit Ihrem Schlüsselpaar und Zertifikat ein Verzeichnis mit dem Namen /META-INF. Erstellen Sie dann in /META-INF eine Datei mit dem Namen descriptor.properties und dem folgenden Inhalt:

certFile={myCertificate}.pem
keyFile={myKey}.pem

Generieren Sie die JAR-Datei mit Ihrem Schlüsselpaar und Zertifikat:

jar -cf myKeystore.jar myCert.pem myKey.pem

Fügen Sie „descriptor.properties“ der JAR-Datei hinzu:

jar -uf myKeystore.jar META-INF/descriptor.properties

Schlüsselspeicher erstellen und die JAR-Datei hochladen

Wenn Sie einen Schlüsselspeicher in einer Umgebung erstellen möchten, müssen Sie nur den Namen des Schlüsselspeichers für die API zum Erstellen eines Schlüsselspeichers oder Truststores angeben. Der Name darf nur alphanumerische Zeichen enthalten:

curl -X POST -H "Content-Type: text/xml" \
https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores \
-d '<KeyStore name="myKeystore"/>' -u email:password

Beispielantwort:

{
 "certs" : [ ],
 "keys" : [ ],
 "name" : "myKeystore"
}

Nachdem Sie einen benannten Schlüsselspeicher in einer Umgebung erstellt haben, können Sie Ihre JAR-Dateien, die ein Zertifikat und einen privaten Schlüssel enthalten, mit der API zum Hochladen einer JAR-Datei in einen Schlüsselspeicher hochladen:

curl -X POST -H "Content-Type: multipart/form-data" \
-F file="@myKeystore.jar" -F password={key_pass} \ "https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/{myKeystore}/keys?alias={key_alias}" \
-u email:password

Die Option -F gibt den Pfad zur JAR-Datei an.

In diesem Aufruf geben Sie zwei Abfrageparameter an:

  • alias : Gibt das Zertifikat und den Schlüssel im Schlüsselspeicher an. Wenn Sie einen virtuellen Host erstellen, verweisen Sie mit dem Aliasnamen auf das Zertifikat und den Schlüssel.
  • password : Das Passwort für den privaten Schlüssel. Lassen Sie diesen Parameter weg, wenn der private Schlüssel kein Passwort hat.

Prüfen Sie, ob der Schlüsselspeicher ordnungsgemäß hochgeladen wurde:

curl https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/myKeystore \
-u email:password

Beispielantwort:

{  
 "certs" : [ "myCertificate" ],
 "keys" : [ "myKey" ],
 "name" : "myKeystore"
}

Truststore erstellen

Die APIs, die Sie zum Erstellen eines Truststores verwenden, sind dieselben wie zum Erstellen eines Schlüsselspeichers. Der einzige Unterschied besteht darin, dass Sie die Zertifikatsdatei als PEM-Datei anstelle einer JAR-Datei übergeben.

Wenn das Zertifikat Teil einer Kette ist, müssen Sie entweder alle Zertifikate in der Kette separat in den Truststore hochladen oder eine einzelne Datei mit allen Zertifikaten erstellen. Fügen Sie zwischen den einzelnen Zertifikaten in der Datei eine neue Zeile ein. Das letzte Zertifikat wird in der Regel vom Aussteller des Zertifikats signiert. Im Truststore laden Sie beispielsweise ein Clientzertifikat, client_cert_1, und das Zertifikat des Ausstellers des Clientzertifikats , ca_cert, hoch.

Bei der bidirektionalen TLS-Authentifizierung ist die Clientauthentifizierung erfolgreich, wenn der Server client_cert_1 im Rahmen des TLS-Handshakes an den Client sendet.

Alternativ haben Sie ein zweites Zertifikat, client_cert_2, das mit demselben Zertifikat, ca_cert, signiert wurde. Sie laden client_cert_2 jedoch nicht in den Truststore hoch. Der Truststore enthält weiterhin client_cert_1 und ca_cert.

Wenn der Server client_cert_2 im Rahmen des TLS-Handshakes übergibt, ist die Anfrage erfolgreich. Das liegt daran, dass Edge die TLS-Überprüfung als erfolgreich zulässt, wenn client_cert_2 nicht im Truststore vorhanden ist, aber von einem Zertifikat signiert wurde, das im Truststore vorhanden ist. Wenn Sie das Zertifikat der Zertifizierungsstelle , ca_cert, aus dem Truststore entfernen, schlägt die TLS-Überprüfung fehl.

Erstellen Sie mit Create a Keystore or Truststore einen leeren Truststore in der Umgebung. Das ist dieselbe API, die Sie zum Erstellen eines Schlüsselspeichers verwenden:

curl -X POST -H "Content-Type: text/xml" -d \
'<KeyStore name="myTruststore"/>' \
https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores \
-u email:password

Laden Sie das Zertifikat mit der API zum Hochladen eines Zertifikats in einen Truststore als PEM-Datei in den Truststore hoch:

curl -X POST -H "Content-Type: multipart/form-data" -F file="@trust.pem" \
https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/myTruststore/certs?alias=myTruststore \
-u email:password

Die Option -F gibt den Pfad zur PEM-Datei an.

Schlüsselspeicher oder Truststore löschen

Sie können einen Schlüsselspeicher oder Truststore mit der API zum Löschen eines Schlüsselspeichers oder Truststores löschen:

curl -X DELETE \
https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores/myKeystoreName \
-u email:password

Beispielantwort:

{
 "certs" : [ ],
 "keys" : [ ],
 "name" : "myKeystoreName"
}

Wenn Sie einen Schlüsselspeicher oder Truststore löschen, der von einem virtuellen Host oder Ziel Endpunkt/Ziel/Server verwendet wird, schlagen alle API-Aufrufe über den virtuellen Host oder Zielendpunkt/Zielserver fehl.