查看 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 中查看這項資訊:
- 登入 Edge 管理 UI,網址為 https://enterprise.apigee.com (雲端) 或
http://<ms-ip>:9000
(地端部署)。 其中<ms-ip>
是 IP 管理伺服器節點位址 - 在 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="GoDaddy.com, Inc.", 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 中查看這項資訊:
- 前往 https://enterprise.apigee.com (cloud) 登入 Edge 管理 UI。
或
http://<ms-ip>:9000
(地端部署) 其中<ms-ip>
是 IP 管理伺服器節點位址 - 在 Edge 管理 UI 選單中,依序選取「Admin」TLS 憑證。
在 Edge UI 中,您可以指定會提前多久向 Edge 指定憑證即將到來 。根據預設,UI 會醒目顯示所有預計於 10 月 10 日到期的憑證 天。
建立 KeyStore
貴機構的特定環境 (例如測試或正式環境) 專用的 KeyStore 環境。因此,如要在部署前在測試環境中測試 KeyStore 至實際工作環境,您必須在這兩個環境中建立該設定檔。
建立 KeyStore 的程序包含兩個步驟:
- 建立包含憑證和私密金鑰的 JAR 檔案。
- 建立 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_1
和 ca_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 呼叫 (透過虛擬主機或目標端點/目標伺服器) 失敗。