查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
本文說明如何建立、修改及刪除 Edge 的 KeyStore 和信任儲存庫 。
,瞭解如何調查及移除這項存取權。簡介
如要設定需要公開金鑰基礎架構 (例如 TLS) 的功能,您必須 建立提供必要金鑰和數位憑證的 KeyStore 和信任儲存庫。
如需 KeyStore、Truststore 和別名的簡介,請參閱 Keystores 和 Truststore。
建立 KeyStore
貴機構的特定環境 (例如測試或正式環境) 專用的 KeyStore 環境。因此,如要在部署前在測試環境中測試 KeyStore 至實際工作環境,您必須在這兩個環境中建立該設定檔。
如何在環境中建立 KeyStore:
- 請在本節中使用 API 呼叫建立 KeyStore。
- 建立別名並將憑證/金鑰組上傳至別名。上傳憑證的方式 金鑰是以憑證/金鑰組的格式為基礎。下列各節說明如何上傳 每個類型的憑證/金鑰組
如要建立 KeyStore 名稱,請將 KeyStore 名稱指定為「Create a KeyStore 或 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
KeyStore JAR 只能包含這三個檔案。如果您擁有憑證鏈結,則所有憑證 鏈結中的「最終憑證」必須附加至單一 PEM 檔案,其中最後一個憑證應簽署 由根 CA 提供。憑證必須以正確順序附加至 PEM 檔案。 在每個憑證之間有空白行,這意味著:
cert -> intermediate cert(1) -> intermediate cert(2) -> … -> root
在包含金鑰組和憑證的目錄中,建立名為
/META-INF
。然後,在
/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
您現在可以使用 從 JAR 或 PKCS 檔案建立別名 API:
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
- 私密金鑰的密碼。省略 如果私密金鑰沒有密碼,則這個參數。
確認 KeyStore 已正確上傳:
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 檔案格式上傳憑證和金鑰
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
- 私密金鑰的密碼。省略 如果私密金鑰沒有密碼,則這個參數。
確認 KeyStore 已正確上傳:
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 格式上傳憑證和金鑰 檔案
請使用 上傳包含憑證和私密金鑰的 PKCS12/PFX 檔案 從 JAR 或 PKCS 檔案建立別名 API:
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
- 私密金鑰的密碼。省略 如果私密金鑰沒有密碼,則這個參數。
確認 KeyStore 已正確上傳:
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 與建立 KeyStore 時使用的 API 相同。 唯一的差別在於您只將憑證檔案以 PEM 檔案格式上傳到信任儲存庫。
如果憑證是鏈結的一部分,您必須分別上傳鏈結中的所有憑證 新增至信任存放區,或建立包含所有憑證的單一檔案。必須插入空白 。
如要上傳不屬於鏈結的多個自行簽署憑證,請使用 相同的技術:如有多組憑證,請將這些憑證上傳到單一檔案。
最終憑證通常是由憑證核發者簽署。例如,在 信任存放區,您必須上傳用戶端憑證、client_cert_1,以及用戶端憑證核發者的 憑證,ca_cert
在雙向 TLS 驗證期間,當伺服器 用戶端_cert_1。
或者,您擁有第二個憑證 (client_cert_2),透過同一個憑證 ca_cert 簽署。 不過,請勿將 client_cert_2 上傳至信任儲存庫。信任儲存庫中仍包含 client_cert_1 和 ca_cert。
當伺服器在 TLS 握手流程中傳遞 client_cert_2 時,要求就會成功。這是 因為 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 檔案格式上傳到信任儲存庫: 使用 透過憑證 PEM 檔案 API 建立別名:
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 檔案的路徑。
取得現有詳細資料 KeyStore 或信任存放區
使用 List KeyStores 檢查環境,檢查是否有任何現有的 KeyStore 和 Truststores API:
curl -u orgAdminEmail:password -X GET \ https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores
如果是雲端客戶, 測試和正式環境您應該會看到以下兩者的這項呼叫結果: 環境:
[ "freetrial" ]
您可以使用這個預設 KeyStore 測試 API,並將 API 推送至實際工作環境,但 通常會使用您自己的憑證和金鑰建立您自己的 KeyStore,然後再部署至 。
如果是 Private Cloud 客戶,在您建立第一個項目之前,傳回的陣列為空白 KeyStore。
使用 取得 KeyStore 或 Truststore 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" }
取得別名的詳細資料
使用 取得 KeyStore 的所有別名清單 列出別名 API:
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", ]
如要取得別名的所有資訊 (例如到期日和核發者),請使用 取得別名 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" }
如要下載別名的憑證,請使用 匯出別名 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,藉此取得新的憑證。如要產生 別名,請使用 產生別名 API 的 CSR:
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 重新載入信任儲存庫和新憑證。
詳情請參閱修改參照。
刪除 KeyStore/truststore 或別名
刪除 KeyStore/truststore 或別名時請務必謹慎。刪除 KeyStore 之後 由虛擬主機、目標端點或目標伺服器使用的 Truststore 或別名 無法透過虛擬主機或目標端點/目標伺服器進行 API 呼叫。
一般而言,刪除 KeyStore/truststore 或別名的程序如下:
- 按照上述方式建立新的 KeyStore/truststore 或別名。
- 如果是「傳入連線」,也就是向 Edge 發出的 API 要求,請將 參照新 KeyStore 和金鑰別名的虛擬主機設定。
- 傳出連線是指從 Apigee 到後端伺服器:
- 針對參照舊舊版本的所有 API Proxy 更新 TargetEndpoint 設定 用來參照新的 KeyStore 和金鑰別名的 KeyStore 和金鑰別名。如果您的目標端點 參照 TargetServer,請更新 TargetServer 定義,以參照新的 KeyStore 以及金鑰別名
- 如果系統直接從 TargetEndpoint 參照 KeyStore 和信任儲存庫 定義,您就必須重新部署 Proxy。如果 TargetEndpoint 參照 TargetServer 定義,而 TargetServer 定義會參照 KeyStore 並 則不需要重新部署 Proxy。
- 確認您的 API Proxy 可正常運作。
- 刪除 KeyStore/truststore 或別名。
詳情請參閱 如需更多資訊,請更新別名中的憑證。
刪除 KeyStore 或信任儲存庫
您可以使用 刪除 KeyStore 或 Truststore API:
curl -u orgAdminEmail:password -X DELETE \ https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/myKeystoreName
刪除並重新建立虛擬主機正在使用的 KeyStore 或信任儲存庫時, 必須重新部署 API Proxy。
刪除別名
您可以使用 刪除別名 API:
curl -u orgAdminEmail:password -X DELETE \ https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/keystores/myKeystoreName/aliases/{alias_name}