為私有雲 4.17.09 以下版本建立 KeyStore 和 Truststores

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

本文說明如何建立、修改及刪除 Edge 的金鑰存放區和信任存放區,適用於 Private Cloud 4.17.09 以下版本。

關於 KeyStore 和信任存放區

KeyStore 和 Truststore 會定義傳輸層安全標準 (TLS) 使用的安全性憑證存放區 加密。兩者的主要差異在於,兩者用於 TLS 握手的位置 程序:

  • KeyStore 包含 TLS 憑證和私密金鑰,用於在 TLS 握手期間識別實體。

    在單向 TLS 中,當用戶端連線至伺服器上的 TLS 端點時,伺服器的 KeyStore 會將伺服器的憑證 (公開憑證) 提供給用戶端。接著,用戶端會透過憑證授權單位 (CA) 驗證憑證,例如 Symantec 或 VeriSign。

    在雙向 TLS 中,用戶端和伺服器都會維護一個 KeyStore,其中包含用於雙向驗證的憑證和私密金鑰。
  • 信任存放區包含用於驗證在 TLS 握手期間收到的憑證的憑證。

    在單向傳輸層安全標準 (TLS) 中,如果憑證是由有效的 CA 簽署,則不需要信任存放區。如果 TLS 用戶端收到的憑證是由有效 CA 簽署,用戶端就會向 CA 提出要求,以便驗證憑證。TLS 用戶端通常會使用信任存放區來驗證從 TLS 伺服器收到的自行簽署憑證,或是未經信任 CA 簽署的憑證。在此情況下,用戶端會在信任存放區中填入所需的憑證 信任關係如此一來,當用戶端收到伺服器憑證時,傳入的憑證 已根據信任存放區中的憑證進行驗證。

    舉例來說,TLS 用戶端會連線至 TLS 伺服器,而伺服器會在該伺服器使用自行簽署的伺服器 憑證由於這是自行簽署的憑證,因此用戶端無法透過 CA 驗證憑證。 而是將伺服器的自行簽署憑證預先載入至信任存放區。接著: 當用戶端嘗試連線至伺服器時,用戶端會使用其信任儲存庫, 驗證從伺服器收到的憑證。

    如果是雙向 TLS,TLS 用戶端和 TLS 伺服器皆可使用信任存放區。當 Edge 充當 TLS 伺服器時,執行雙向 TLS 時就需要信任存放區。
,瞭解如何調查及移除這項存取權。

憑證可由憑證授權單位 (CA) 核發,也可以由 您產生的私密金鑰如果您可以存取 CA,請按照 用於產生金鑰及核發憑證的 CA。如果您無法存取 CA,可以使用許多公開提供的免費工具 (例如 openssl) 產生自行簽署的憑證。

實作 Edge 上的 KeyStore 和信任存放區

在 Edge 上,金鑰庫包含一或多個 JAR 檔案,而 JAR 檔案包含下列項目:

  • TLS 憑證為 PEM 檔案:憑證授權單位 (CA) 簽署的憑證、憑證鏈 (最後一張憑證由 CA 簽署),或自行簽署的憑證。
  • 做為 PEM 檔案的私密金鑰。Edge 可支援高達 2048 位元的金鑰大小。通關密語為 選用。

信任儲存庫與 KeyStore 相似,差別在於其僅包含做為 PEM 檔案的憑證, 私密金鑰

如果憑證是鏈結的一部分,則金鑰存放區/信任存放區必須包含鏈結中的所有憑證,可以是個別的 PEM 檔案,也可以是單一檔案。如果使用單一檔案, 憑證必須依照以下順序排列,檔案中的第一個憑證是 TLS 使用的憑證 憑證鏈結至 CA 憑證。必須在 檔案中的各個憑證

Edge 提供 API,可用於建立金鑰庫和信任存放區。實際 API 包含 完全一樣。差異在於建立 KeyStore 時,您會傳遞包含憑證和私密金鑰的 JAR 檔案。建立信任存放區時,您只需將憑證以 PEM 檔案的形式傳遞即可。

關於 憑證和金鑰檔案

本文件中的範例顯示定義為 PEM 檔案的 TLS 憑證和金鑰,這些檔案符合 X.509 格式。如果 PEM 檔案未定義您的憑證或私密金鑰,您可以 或是使用 Opensl 等公用程式 將映像檔上傳至 PEM 檔案

不過,許多 .crt 檔案和 .key 檔案都已採用 PEM 格式。如果這些檔案是文字檔案,且位於以下位置:

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

或是:

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

接著,這些檔案與 PEM 格式相容,供您在 KeyStore 或 不必轉換為 PEM 檔案

如果您有憑證鏈結,且想在 KeyStore 或 TrustStore 中使用該鏈結,則可以將所有憑證合併至單一 PEM 檔案,並在每個憑證之間加入新行。 憑證必須依序排列,且最後一個憑證必須是根憑證或中繼憑證 已簽署的憑證:

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

取得現有 KeyStore 的詳細資料

使用 List Keystores and Truststores API,檢查環境中是否有任何現有的 KeyStore:

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

如果是雲端客戶, 測試和正式環境您應該會看到以下兩者的這項呼叫結果: 環境:

[ "freetrial" ]

您可以使用這個預設 KeyStore 測試 API,並將 API 推送至實際工作環境,但 通常在部署至正式環境之前,使用自己的憑證和金鑰建立自己的 KeyStore。

對於私有雲客戶,在您建立第一個 KeyStore 之前,傳回的陣列會是空白的。

使用 Get a Keystore or Truststore API 檢查 KeyStore 內容。雲端客戶應看到單一伺服器傳輸層安全標準 (TLS) 憑證,也就是 Apigee Edge 為免費試用帳戶提供的預設憑證。

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

回應內容應如下所示:

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

您也可以在 Edge 管理 UI 中查看這項資訊:

  1. 登入 Edge 管理介面 UI,網址為 https://enterprise.apigee.com (雲端) 或 http://<ms-ip>:9000 (地端),其中 <ms-ip> 是管理伺服器節點的 IP 位址。
  2. 在 Edge 管理 UI 選單中,依序選取「Admin」>「TLS Certificates」

取得 TLS 憑證詳細資料

您可以使用 Get Cert Details from a Keystore or Truststore API 查看 KeyStore 中的 TLS 憑證詳細資料,例如到期日和發證者。首先,請取得 請選取您感興趣的主題這個範例會擷取名為「freetrial」的 KeyStore 資訊。

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

回應範例:

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

接著,使用 certs 屬性的值取得憑證詳細資料:

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

回應範例:

{
 "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"
}

您也可以在 Edge 管理 UI 中查看這項資訊:

  1. 登入 Edge 管理 UI,網址為 https://enterprise.apigee.com (雲端) 或 http://<ms-ip>:9000 (地端部署),其中 <ms-ip> 是管理伺服器節點的 IP 位址。
  2. 在 Edge 管理 UI 選單中,依序選取「Admin」傳輸層安全標準 (TLS) 憑證

在 Edge UI 中,您可以指定會提前多久向 Edge 指定憑證即將到來 。根據預設,UI 會醒目顯示所有預計於 10 月 10 日到期的憑證 天。

建立 KeyStore

貴機構的特定環境 (例如測試或正式環境) 專用的 KeyStore 環境。因此,如果您想在將金鑰庫部署至正式環境前,先在測試環境中測試金鑰庫,就必須在兩個環境中建立金鑰庫。

建立 KeyStore 的程序包含兩個步驟:

  1. 建立包含憑證和私密金鑰的 JAR 檔案。
  2. 建立 KeyStore 並上傳 JAR 檔案。

建立 JAR 檔案 包括憑證和私密金鑰

使用私密金鑰、憑證和資訊清單建立 JAR 檔案。JAR 檔案必須包含下列檔案和目錄:

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

在包含金鑰組和憑證的目錄中,建立名為 /META-INF。接著建立檔案 名為「descriptor.properties」的時間: /META-INF,其中包含下列內容 內容:

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

產生包含金鑰組和憑證的 JAR 檔案:

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

將 descriptor.properties 新增至 JAR 檔案:

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

建立 KeyStore 並上傳 JAR 檔案

如要在環境中建立 KeyStore,只需將 KeyStore 名稱指定為 建立 KeyStore 或 Truststore API。這個名稱只能包含英數字元:

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

回應範例:

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

在環境中建立命名 KeyStore 後,您可以使用「Upload a JAR file to a Keystore」API 上傳包含憑證和私密金鑰的 JAR 檔案:

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

其中 -F 選項會指定 JAR 檔案的路徑

在這個呼叫中,您會指定兩個查詢參數:

  • alias - 識別 憑證和金鑰建立虛擬主機時,您可以使用別名名稱參照憑證和金鑰。
  • password - 私密金鑰的密碼。如果私密金鑰沒有密碼,請省略此參數。

確認 KeyStore 已正確上傳:

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

回應範例:

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

建立信任存放區

用於建立信任儲存庫的 API 與建立 KeyStore 時使用的 API 相同。唯一的差異在於,您會以 PEM 檔案而非 JAR 檔案的形式傳遞憑證檔案。

如果憑證是鏈結的一部分,您必須將鏈結中的所有憑證分別上傳至信任存放區,或是建立包含所有憑證的單一檔案,並在檔案中的每個憑證之間加入新行。最終憑證通常由憑證核發機構簽署。適用對象 例如,您在信任儲存庫中上傳用戶端憑證 client_cert_1 和用戶端憑證 核發者的憑證,ca_cert

在雙向 TLS 驗證期間,如果伺服器在 TLS 握手程序中將 client_cert_1 傳送至用戶端,則用戶端驗證會成功。

或者,您擁有第二個憑證 (client_cert_2),透過同一個憑證簽署。 ca_cert。不過您無須使用 將 client_cert_2 上傳到 信任儲存庫信任儲存庫仍包含 client_cert_1ca_cert

當伺服器在 TLS 握手程序中傳遞 client_cert_2 時, 要求成功。這是因為 Edge 允許 TLS 驗證成功,即使 client_cert_2 不在信任存放區中,但已由信任存放區中的憑證簽署。如果您從信任存放區中移除 CA 憑證 ca_cert,TLS 驗證就會失敗。

使用建立 KeyStore 或 Truststore,也就是您用來建立 KeyStore 的 API:

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

使用「Upload a Certificate to a Truststore」API,將憑證上傳至信任存放區的 PEM 檔案:

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

其中 -F 選項會指定 PEM 檔案的路徑

刪除 KeyStore 或 TrustStore

您可以使用 刪除 KeyStore 或 Truststore API:

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

回應範例:

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

刪除虛擬主機或目標正在使用的 KeyStore 或信任儲存庫 端點/目標/伺服器,所有 API 呼叫 (透過虛擬主機或目標端點/目標伺服器) 失敗。