使用 Edge Management API 建立 KeyStore 和信任存放區

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

本文說明如何建立、修改及刪除 Edge 的 KeyStore 和信任儲存庫 。

,瞭解如何調查及移除這項存取權。

簡介

如要設定需要公開金鑰基礎架構 (例如 TLS) 的功能,您必須 建立提供必要金鑰和數位憑證的 KeyStore 和信任儲存庫。

如需 KeyStore、Truststore 和別名的簡介,請參閱 Keystores 和 Truststore

建立 KeyStore

貴機構的特定環境 (例如測試或正式環境) 專用的 KeyStore 環境。因此,如要在部署前在測試環境中測試 KeyStore 至實際工作環境,您必須在這兩個環境中建立該設定檔。

如何在環境中建立 KeyStore:

  1. 請在本節中使用 API 呼叫建立 KeyStore。
  2. 建立別名並將憑證/金鑰組上傳至別名。上傳憑證的方式 金鑰是以憑證/金鑰組的格式為基礎。下列各節說明如何上傳 每個類型的憑證/金鑰組

如要建立 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 檔案格式上傳憑證和金鑰

使用 透過憑證和金鑰 PEM 檔案 API 建立別名

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 的信任存放區:

  1. 確認您在虛擬主機中使用信任存放區的參照。
  2. 按照上方說明,將新憑證上傳至信任存放區 建立信任儲存庫
  3. 更新信任儲存庫參照,將其設為相同的值。 這項更新會使 Edge 重新載入信任儲存庫和新憑證。

    詳情請參閱修改參照

刪除 KeyStore/truststore 或別名

刪除 KeyStore/truststore 或別名時請務必謹慎。刪除 KeyStore 之後 由虛擬主機、目標端點或目標伺服器使用的 Truststore 或別名 無法透過虛擬主機或目標端點/目標伺服器進行 API 呼叫。

一般而言,刪除 KeyStore/truststore 或別名的程序如下:

  1. 按照上述方式建立新的 KeyStore/truststore 或別名。
  2. 如果是「傳入連線」,也就是向 Edge 發出的 API 要求,請將 參照新 KeyStore 和金鑰別名的虛擬主機設定。
  3. 傳出連線是指從 Apigee 到後端伺服器:
    1. 針對參照舊舊版本的所有 API Proxy 更新 TargetEndpoint 設定 用來參照新的 KeyStore 和金鑰別名的 KeyStore 和金鑰別名。如果您的目標端點 參照 TargetServer,請更新 TargetServer 定義,以參照新的 KeyStore 以及金鑰別名
    2. 如果系統直接從 TargetEndpoint 參照 KeyStore 和信任儲存庫 定義,您就必須重新部署 Proxy。如果 TargetEndpoint 參照 TargetServer 定義,而 TargetServer 定義會參照 KeyStore 並 則不需要重新部署 Proxy。
    3. 確認您的 API Proxy 可正常運作。
    4. 刪除 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}