您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
本文說明如何為 Edge for Cloud 和 Edge for Private Cloud 4.18.01 以上版本建立、修改及刪除金鑰儲存區和信任儲存區。
簡介
如要設定依賴公用金鑰基礎架構的功能 (例如 TLS),您需要建立提供必要金鑰和數位憑證的金鑰儲存區和信任儲存區。
如要瞭解 KeyStore、信任儲存庫和別名,請參閱「KeyStore 和信任儲存庫」。
建立金鑰儲存庫
金鑰儲存區是貴機構環境專屬的,例如測試或正式環境。因此,如要在測試環境中測試金鑰儲存區,再將其部署至正式環境,您必須在這兩個環境中建立金鑰儲存區。
如要在環境中建立 KeyStore,請按照下列步驟操作:
- 使用本節中的 API 呼叫建立金鑰儲存區。
- 建立別名,並將憑證/金鑰組上傳至別名。上傳憑證和金鑰的方式取決於憑證/金鑰組的格式。以下各節說明如何上傳各類型的憑證/金鑰配對:
如要建立 KeyStore,請在「Create a Keystore or Truststore」API 中指定 KeyStore 名稱。金鑰儲存庫名稱只能包含英數字元:
curl -X POST -u orgAdminEmail:password -H "Content-Type: text/xml" \
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores \
-d '<KeyStore name="myKeystore"/>'回應範例:
{ "certs" : [ ], "keys" : [ ], "name" : "myKeystore" }
以 JAR 檔案上傳憑證和金鑰
您必須先使用私密金鑰、憑證和資訊清單建立 JAR 檔案。JAR 檔案必須包含下列檔案和目錄:
/META-INF/descriptor.properties myCert.pem myKey.pem
金鑰儲存庫 JAR 檔案可以只包含這三個檔案。如果您有憑證鏈結,鏈結中的所有憑證都必須附加到單一 PEM 檔案中,且最後一個憑證應由根 CA 簽署。憑證必須以正確順序附加至 PEM 檔案,且每個憑證之間須空一行,也就是:
cert -> intermediate cert(1) -> intermediate cert(2) -> … -> root
在包含金鑰組和憑證的目錄中,建立名為 /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
您現在可以使用「從 JAR 或 PKCS 檔案建立別名」API,上傳內含憑證和私密金鑰的 JAR 檔案:
curl -u orgAdminEmail:password -X POST -H "Content-Type: multipart/form-data" -F file="@myKeystore.jar" -F password={key_pword} \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases?alias={alias_name}&format=keycertjar"
其中 -F 選項會指定 JAR 檔案的路徑。
在這次呼叫中,您會指定:
alias_name- 識別金鑰存放區中的憑證和金鑰。建立虛擬主機時,請依別名參照憑證和金鑰。key_pword- 私密金鑰的密碼。如果私密金鑰沒有密碼,請省略這個參數。
確認金鑰存放區已正確上傳:
curl -u orgAdminEmail:password -X GET\
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}
回應範例:
{ "certs" : [ "myCertificate" ], "keys" : [ "myKey" ], "name" : "myKeystore" }
以 PEM 檔案形式上傳憑證和金鑰
使用「Create an alias from certificate and key PEM files」(從憑證和金鑰 PEM 檔案建立別名) API,上傳含有憑證和私密金鑰的 PEM 檔案:
curl -u orgAdminEmail:password -X POST -H "Content-Type: multipart/form-data" -F keyFile="@server.key" -F certFile="@signed.crt" \
-F password={key_pword} \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases?alias={alias_name}&format=keycertfile"
其中 -F 選項會指定 PEM 檔案的路徑。
在這次呼叫中,您會指定:
alias_name- 識別金鑰存放區中的憑證和金鑰。建立虛擬主機時,請依別名參照憑證和金鑰。key_pword- 私密金鑰的密碼。如果私密金鑰沒有密碼,請省略這個參數。
確認金鑰存放區已正確上傳:
curl -u orgAdminEmail:password -X GET\
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}
回應範例:
{ "certs" : [ "myCertificate" ], "keys" : [ "myKey" ], "name" : "myKeystore" }
以 PKCS12/PFX 檔案上傳憑證和金鑰
使用「Create an alias from a JAR or PKCS file」(從 JAR 或 PKCS 檔案建立別名) API,上傳內含憑證和私密金鑰的 PKCS12/PFX 檔案:
curl -u orgAdminEmail:password -X POST -H "Content-Type: multipart/form-data" \
-F file="@myKeystore.p12" -F password={key_pword} \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases?alias={alias_name}&format=pkcs12"
其中 -F 選項會指定 P12 檔案的路徑。
在這次呼叫中,您會指定:
alias_name- 識別金鑰存放區中的憑證和金鑰。建立虛擬主機時,請依別名參照憑證和金鑰。key_pword- 私密金鑰的密碼。如果私密金鑰沒有密碼,請省略這個參數。
確認金鑰存放區已正確上傳:
curl -u orgAdminEmail:password -X GET\
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}
回應範例:
{ "certs" : [ "myCertificate" ], "keys" : [ "myKey" ], "name" : "myKeystore" }
建立並上傳自行簽署的憑證和金鑰
您可以使用「 透過產生自行簽署的憑證建立別名」API,建立自行簽署的憑證和金鑰,並將其上傳至別名。下列呼叫只會指定建立自簽憑證所需的資訊。您可以修改這項呼叫,加入其他資訊:
curl -u orgAdminEmail:password -X POST --header "Content-Type: application/json" \
-d "{
"alias": "selfsigned",
"subject": {
"commonName": "mycert"
}
}" \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases?format=selfsignedcert"
回覆應如下所示:
{ "alias": "selfsigned", "certsInfo": { "certInfo": [ { "basicConstraints": "CA:FALSE", "expiryDate": 1491497204000, "isValid": "Yes", "issuer": "CN=mycert", "publicKey": "RSA Public Key, 2048 bits", "serialNumber": "00:d1:b4:78:e1", "sigAlgName": "SHA256withRSA", "subject": "CN=mycert", "subjectAlternativeNames": [], "validFrom": 1459961204000, "version": 3 } ], "certName": "selfsigned-cert" }, "keyName": "selfsigned" }
建立信任儲存庫
您用來建立信任儲存區的 API 與建立金鑰儲存區的 API 相同。唯一的差別在於您只會將憑證檔案 (PEM 檔案) 上傳至信任存放區。
如果憑證是鏈結的一部分,您必須將鏈結中的所有憑證分別上傳至信任儲存區,或是建立包含所有憑證的單一檔案。檔案中的每個憑證之間必須插入空白行。
如要上傳多個不屬於鏈結的自行簽署憑證,請使用相同技巧:如要信任多個憑證,請將這些憑證上傳至單一檔案。
最終憑證通常由憑證核發機構簽署。舉例來說,在信任儲存庫中,您會上傳用戶端憑證 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 時,要求就會成功。這是因為當 truststore 中沒有 client_cert_2,但該憑證是由 truststore 中的憑證簽署時,Edge 允許 TLS 驗證成功。如果從信任儲存區移除 CA 憑證 ca_cert,TLS 驗證就會失敗。
使用「建立 KeyStore 或 TrustStore」,在環境中建立空白的信任儲存區,這與您建立 KeyStore 時使用的 API 相同:
curl -u orgAdminEmail:password -X POST -H "Content-Type: text/xml" \
-d '<KeyStore name="myTruststore"/>' \
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores
建立信任儲存區後,請使用「 從憑證 PEM 檔案建立別名」API,將憑證以 PEM 檔案形式上傳至信任儲存區:
curl -u orgAdminEmail:password -X POST -H "Content-Type: multipart/form-data" -F certFile="@cert.pem" \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/myTruststore/aliases?alias=myTruststore&format=keycertfile"
其中 -F 選項會指定 PEM 檔案的路徑。
取得現有金鑰儲存區或信任儲存庫的詳細資料
使用「List Keystores and Truststores」(列出 KeyStore 和 TrustStore) API,檢查環境中是否有現有的 KeyStore:
curl -u orgAdminEmail:password -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores
對於雲端客戶,測試和正式版環境中的試用機構都會提供預設金鑰儲存區。您應該會看到以下兩個環境的呼叫結果:
[ "freetrial" ]
您可以使用這個預設金鑰儲存區測試 API,並將 API 推送至正式環境,但通常在部署至正式環境前,您會使用自己的憑證和金鑰建立自己的金鑰儲存區。
如果是私有雲客戶,您必須先建立第一個金鑰儲存區,傳回的陣列才會包含資料。
使用「 取得金鑰儲存區或信任儲存庫」API 檢查金鑰儲存區的內容。如果是雲端客戶,您應該會看到單一伺服器 TLS 憑證,也就是 Apigee Edge 為免費試用帳戶提供的預設憑證。
curl -u orgAdminEmail:password -X GET\
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/freetrial
回覆應如下所示:
{ "certs" : [ "wildcard.apigee.net.crt" ], "keys" : [ "freetrial" ], "name" : "freetrial" }
取得別名的詳細資料
使用「列出別名」API,取得 KeyStore 的所有別名清單:
curl -u orgAdminEmail:password -X GET \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases"
回覆應如下所示:
[ "alias1", "alias2", "alias3", ]
如要取得別名的所有資訊 (例如到期日和發行者),請使用 Get alias API 並指定別名:
curl -u orgAdminEmail:password -X GET \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases/{alias_name}"
回覆應如下所示:
{ "alias": "alias1", "certsInfo": { "certInfo": [ { "basicConstraints": "CA:TRUE", "expiryDate": 1459371335000, "isValid": "No", "issuer": "EMAILADDRESS=foo@bar.com, CN=smg, OU=doc, O=Internet Widgits Pty Ltd, L=noho, ST=Some-State, C=AU", "publicKey": "RSA Public Key, 1024 bits", "serialNumber": "00:86:a0:9b:5b:91:a9:fe:92", "sigAlgName": "SHA256withRSA", "subject": "EMAILADDRESS=foo@bar.com, CN=smg, OU=doc, O=Internet Widgits Pty Ltd, L=noho, ST=Some-State, C=AU", "subjectAlternativeNames": [], "validFrom": 1456779335000, "version": 3 } ], "certName": "new\-cert" }, "keyName": "newssl20" }
如要下載別名的憑證,請使用「Export a certificate for an alias」(匯出別名的憑證) API:
curl -u orgAdminEmail:password -X GET \
"https://api.enterprise.apigee.com/v1/e/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases/{alias_name}/certificate"
回覆應如下所示:
-----BEGIN CERTIFICATE----- MIIDojCCAwugAwIBAgIJAIagm1uRqf6SMA0GCSqGSIb3DQEBCwUAMIGTMQswCQYD ... RBUkaTe/570sLHY0tvkIm5tEX36ESw== -----END CERTIFICATE-----
如果憑證已過期,但您想續約,可以下載憑證簽署要求 (CSR)。然後將 CSR 傳送給 CA,以取得新憑證。如要為別名產生 CSR,請使用「為別名產生 CSR」API:
curl -u orgAdminEmail:password -X GET \
"https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/{keystore_name}/aliases/{alias_name}/csr"
回覆應如下所示:
-----BEGIN CERTIFICATE REQUEST----- MIIB1DCCAT0CAQAwgZMxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRl ... RF5RMytbkxkvPxIE17mDKJH0d8aekv/iEOItZ+BtQg+EibMUkkjTzQ== -----END CERTIFICATE REQUEST-----
將憑證新增至雙向 TLS 的信任儲存區
使用雙向 TLS 進行連入連線 (也就是對 Edge 發出的 API 要求) 時,信任儲存區會包含允許對 Edge 提出要求的每個用戶端的憑證或 CA 鏈結。
首次設定信任儲存區時,您可以新增已知用戶端的所有憑證。不過,隨著您新增用戶端,可能需要將其他憑證新增至信任儲存庫。
如要將新憑證新增至雙向傳輸層安全標準:TLS 使用的信任儲存庫,請按照下列步驟操作:
- 確認您在虛擬主機中使用了信任儲存區的參照。
- 如上述「建立信任儲存庫」一節所述,將新憑證上傳至信任儲存庫。
更新信任儲存區參照,將其設為相同值。 更新後,Edge 會重新載入信任儲存區和新憑證。
詳情請參閱「修改參照」。
刪除金鑰儲存庫/信任儲存庫或別名
刪除金鑰儲存區/信任儲存區或別名時,請務必謹慎。如果刪除虛擬主機、目標端點或目標伺服器使用的金鑰儲存區、信任儲存區或別名,透過虛擬主機或目標端點/目標伺服器發出的所有 API 呼叫都會失敗。
通常,刪除金鑰存放區/信任存放區或別名的程序如下:
- 按照上述方式建立新的 KeyStore/TrustStore 或別名。
- 如果是連入連線 (也就是傳送至 Edge 的 API 要求),請更新虛擬主機設定,以參照新的金鑰儲存區和金鑰別名。
- 如果是輸出連線,也就是從 Apigee 連線至後端伺服器:
- 更新參照舊金鑰儲存區和金鑰別名的所有 API Proxy 的 TargetEndpoint 設定,以參照新的金鑰儲存區和金鑰別名。如果 TargetEndpoint 參照 TargetServer,請更新 TargetServer 定義,參照新的金鑰儲存區和金鑰別名。
- 如果直接從 TargetEndpoint 定義參照金鑰儲存區和信任儲存區,則必須重新部署 Proxy。如果 TargetEndpoint 參照 TargetServer 定義,且 TargetServer 定義參照金鑰儲存區和信任儲存區,則不必重新部署 Proxy。
- 確認 API Proxy 運作正常。
- 刪除金鑰儲存區/信任儲存區或別名。
詳情請參閱「 更新別名中的憑證」。
刪除金鑰儲存庫或信任儲存庫
您可以使用「 Delete a Keystore or Truststore」API 刪除金鑰儲存區或信任儲存區:
curl -u orgAdminEmail:password -X DELETE \
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/myKeystoreName
如果刪除並重新建立虛擬主機使用的金鑰儲存區或信任儲存區,就必須重新部署 API Proxy。
刪除別名
您可以使用「 刪除別名」API,刪除 KeyStore 或信任儲存庫中的別名:
curl -u orgAdminEmail:password -X DELETE \
https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/myKeystoreName/aliases/{alias_name}