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

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

本文說明如何建立、修改及刪除 Edge 的 KeyStore 和信任儲存庫 私有雲 4.17.09 以下版本。

關於 KeyStore 和信任存放區

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

  • 「KeyStore」包含 TLS 憑證和私密金鑰,可用於識別 簽署的實體。

    在單向 TLS 中,用戶端連線至伺服器上的 TLS 端點時,伺服器的 KeyStore 會將伺服器的憑證 (公開憑證) 提供給用戶端。接著,用戶端會驗證 憑證。

    在雙向傳輸層安全標準 (TLS) 中,用戶端和伺服器都會透過自己的憑證維護 KeyStore 用於雙向驗證的私密金鑰
  • truststore 包含的憑證用來驗證接收為 部分 TLS 握手程序。

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

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

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

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

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

在 Edge 上,KeyStore 包含一或多個 JAR 檔案,而 JAR 檔案含有:

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

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

如果憑證是鏈結的一部分,則 KeyStore/truststore 必須包含 鏈結。如果使用單一檔案, 憑證必須依照以下順序排列,檔案中的第一個憑證是 TLS 使用的憑證 憑證鏈結至 CA 憑證。必須在 檔案中的各個憑證

Edge 提供一個 API,可用於建立 KeyStore 和信任儲存庫。實際 API 包含 完全一樣。差別在於建立 KeyStore 時,你會傳遞含有 憑證和私密金鑰建立信任儲存庫時,您僅會以 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 或信任存放區中使用該鏈結,則 您可以將所有憑證合併成一個 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 檢查環境,檢查是否有任何現有的 KeyStore 和 Truststores API:

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

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

[ "freetrial" ]

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

如果是 Private Cloud 客戶,在您建立第一個項目之前,傳回的陣列為空白 KeyStore。

使用 取得 KeyStore 或 Truststore API。雲端客戶應看到單一伺服器傳輸層安全標準 (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) 憑證

取得 TLS 憑證詳細資料

您可以使用 從 KeyStore 或 Truststore API 取得認證詳細資料,即可查看以下項目的傳輸層安全標準 (TLS) 憑證詳細資料: 例如到期日和核發者首先,請取得 請選取您感興趣的主題這個範例會擷取名為 「freetrial」。

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. 前往 https://enterprise.apigee.com (cloud) 登入 Edge 管理 UI。 或 http://<ms-ip>:9000 (地端部署) 其中 <ms-ip> 是 IP 管理伺服器節點位址
  2. 在 Edge 管理 UI 選單中,依序選取「Admin」TLS 憑證

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

建立 KeyStore

貴機構的特定環境 (例如測試或正式環境) 專用的 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

將 描述元.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 後,可以上傳 如何透過 將 JAR 檔案上傳至 KeyStore API:

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 驗證期間,當伺服器 以 client_cert_1 的形式傳送至用戶端 是 TLS 握手程序的一部分

或者,您擁有第二個憑證 (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

使用 ,以 PEM 檔案格式將憑證上傳至信任儲存庫 將憑證上傳至 Truststore API

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 或信任儲存庫

您可以使用 刪除 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 呼叫 (透過虛擬主機或目標端點/目標伺服器) 失敗。