您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
本文說明如何為 Edge for Private Cloud 4.17.09 版和更早版本建立、修改及刪除金鑰儲存區和信任儲存區。
關於 KeyStore 和信任儲存區
金鑰儲存區和信任儲存區定義用於 TLS 加密的安全性憑證存放區。兩者主要差異在於 TLS 交握程序中的使用位置:
- 金鑰儲存區包含 TLS 憑證和私密金鑰,用於在 TLS 握手期間識別實體。
在單向 TLS 中,當用戶端連線至伺服器上的 TLS 端點時,伺服器的金鑰儲存區會向用戶端出示伺服器的憑證 (公開憑證)。接著,用戶端會使用憑證授權單位 (CA) (例如 Symantec 或 VeriSign) 驗證該憑證。
在雙向 TLS 中,用戶端和伺服器都會維護金鑰儲存區,其中包含各自的憑證和私密金鑰,用於相互驗證。 - truststore包含用於驗證憑證的憑證,這些憑證是 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 和 TrustStore
在 Edge 中,金鑰儲存區包含一或多個 JAR 檔案,而 JAR 檔案包含:
- PEM 檔案格式的 TLS 憑證,可以是憑證授權單位 (CA) 簽署的憑證、最後一個憑證由 CA 簽署的憑證鏈,或是自行簽署的憑證。
- 私密金鑰 (PEM 檔案)。Edge 支援的金鑰大小上限為 2048 位元。通關密語為選填項目。
信任儲存區與金鑰儲存區類似,但只包含 PEM 檔案中的憑證,不含私密金鑰。
如果憑證是鏈結的一部分,金鑰存放區/信任儲存庫必須包含鏈結中的所有憑證,可以是個別的 PEM 檔案,也可以是單一檔案。如果使用單一檔案,則憑證必須依序排列,檔案中的第一個憑證是 TLS 使用的憑證,後面依序是 CA 憑證的憑證鏈結。您必須在檔案中每個憑證之間插入空白行。
Edge 提供 API,可供您建立金鑰儲存區和信任儲存區。實際 API 相同。不同之處在於,建立金鑰儲存區時,您會傳遞包含憑證和私密金鑰的 JAR 檔案。建立信任儲存庫時,您只會以 PEM 檔案形式傳遞憑證。
關於憑證和金鑰檔案的格式
本文中的範例顯示定義為 PEM 檔案的 TLS 憑證和金鑰,這些檔案符合 X.509 格式。如果憑證或私密金鑰不是以 PEM 檔案定義,您可以使用 openssl 等公用程式,將其轉換為 PEM 檔案。
不過,許多 .crt 檔案和 .key 檔案已採用 PEM 格式。如果這些檔案是文字檔,且以以下符號括住:
-----BEGIN CERTIFICATE----- -----END CERTIFICATE-----
或是:
-----BEGIN ENCRYPTED PRIVATE KEY----- -----END ENCRYPTED PRIVATE KEY-----
這樣一來,檔案就會與 PEM 格式相容,您可以在金鑰儲存區或信任儲存庫中使用這些檔案,不必轉換為 PEM 檔案。
如果您有憑證鏈結,並想在金鑰存放區或信任儲存庫中使用該鏈結,則可將所有憑證合併為單一 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-----
取得現有金鑰儲存區的詳細資料
使用「List Keystores and Truststores」(列出 KeyStore 和 TrustStore) API,檢查環境中是否有現有的 KeyStore:
curl -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/environments/{env_name}/keystores \
-u email:password
對於雲端客戶,測試和正式版環境中的試用機構都會提供預設金鑰儲存區。您應該會看到以下兩個環境的呼叫結果:
[ "freetrial" ]
您可以使用這個預設金鑰儲存區測試 API,並將 API 推送至正式環境,但通常在部署至正式環境前,您會使用自己的憑證和金鑰建立自己的金鑰儲存區。
如果是私有雲客戶,您必須先建立第一個金鑰儲存區,傳回的陣列才會包含資料。
使用「 取得金鑰儲存區或信任儲存庫」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 中查看這項資訊:
- 在 https://enterprise.apigee.com (雲端) 或
http://<ms-ip>:9000(地端部署) 登入 Edge 管理使用者介面,其中<ms-ip>是管理伺服器節點的 IP 位址。 - 在 Edge 管理 UI 選單中,依序選取「Admin」>「TLS Certificates」。
取得傳輸層安全標準 (TLS) 憑證詳細資料
您可以使用「 從金鑰儲存區或信任儲存區取得憑證詳細資料」API,查看金鑰儲存區中 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="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 (雲端) 或
http://<ms-ip>:9000(地端部署) 登入 Edge 管理使用者介面,其中<ms-ip>是管理伺服器節點的 IP 位址。 - 在 Edge 管理 UI 選單中,依序選取「Admin」>「TLS Certificates」。
在 Edge UI 中,您可以指定 Edge 要提前多久指出憑證即將到期。根據預設,使用者介面會醒目顯示預計在未來 10 天內到期的憑證。
建立金鑰儲存庫
金鑰儲存區是貴機構環境專屬的,例如測試或正式環境。因此,如要在測試環境中測試金鑰儲存區,再將其部署至正式環境,您必須在這兩個環境中建立金鑰儲存區。
建立 KeyStore 的程序包含兩個步驟:
- 建立包含憑證和私密金鑰的 JAR 檔案。
- 建立 KeyStore 並上傳 JAR 檔案。
建立包含憑證和私密金鑰的 JAR 檔案
使用私密金鑰、憑證和資訊清單建立 JAR 檔案。JAR 檔案必須包含下列檔案和目錄:
/META-INF/descriptor.properties myCert.pem myKey.pem
在包含金鑰組和憑證的目錄中,建立名為 /META-INF 的目錄。接著,在 /META-INF 中建立名為 descriptor.properties 的檔案,並加入下列內容:
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 或信任儲存庫」API 指定 KeyStore 名稱即可。名稱只能包含英數字元:
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" }
在環境中建立具名金鑰儲存區後,即可使用「Upload a JAR file to a Keystore」(將 JAR 檔案上傳至金鑰儲存區) 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- 私密金鑰的密碼。如果私密金鑰沒有密碼,請省略這個參數。
確認金鑰存放區已正確上傳:
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 與建立金鑰儲存區的 API 相同。唯一不同之處在於,您傳遞憑證檔案時,是使用 PEM 檔案而非 JAR 檔案。
如果憑證是鏈結的一部分,您必須將鏈結中的所有憑證分別上傳至信任儲存區,或是建立包含所有憑證的單一檔案,並在檔案中以新行分隔每個憑證。最終憑證通常由憑證核發機構簽署。舉例來說,您會在信任儲存區中上傳用戶端憑證 client_cert_1,以及用戶端憑證簽發機構的憑證 ca_cert。
在雙向 TLS 驗證期間,當伺服器在 TLS 握手程序中將 client_cert_1 傳送至用戶端時,用戶端驗證就會成功。
或者,您有第二個憑證 client_cert_2,由同一個憑證 ca_cert 簽署。不過,您不會將 client_cert_2 上傳至信任儲存區。信任儲存區仍包含 client_cert_1 和 ca_cert。
伺服器在 TLS 握手期間傳遞 client_cert_2 時,要求就會成功。這是因為當 client_cert_2 不存在於信任儲存區,但由信任儲存區中的憑證簽署時,Edge 允許 TLS 驗證成功。如果從信任儲存區移除 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 檔案的路徑。
刪除金鑰儲存庫或信任儲存庫
您可以使用「 Delete a Keystore or 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" }
如果您刪除虛擬主機或目標端點/目標/伺服器使用的金鑰儲存區或信任儲存區,透過虛擬主機或目標端點/目標伺服器發出的所有 API 呼叫都會失敗。