產生和設定後端身分驗證的 SSL 憑證 - Amazon API Gateway

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

產生和設定後端身分驗證的 SSL 憑證

您可以使用 API Gateway 產生 SSL 憑證,並在後端系統中使用其公開金鑰確認對後端系統的 HTTP 請求來自 API Gateway。這可讓 HTTP 後端系統僅接受 Amazon API Gateway 所發出的請求並加以控管,即使後端系統可公開存取也一樣。

注意

有些後端伺服器可能不支援 SSL 用戶端身分驗證,因為 API Gateway 可以確實傳回 SSL 憑證錯誤。如需不相容的後端伺服器清單,請參閱「Amazon API Gateway 重要說明」。

API Gateway 所產生的 SSL 憑證為自我簽署憑證,且只有在 API Gateway 主控台中或透過 API 才能看見憑證的公開金鑰。

使用 API Gateway 主控台產生用戶端憑證

  1. 在以下網址開啟 API Gateway 主控台:https://console.aws.amazon.com/apigateway/

  2. 選擇 REST API。

  3. 在主導覽窗格中,選擇用戶端憑證

  4. 用戶端憑證頁面,選擇產生憑證

  5. Description (描述),請輸入描述。

  6. 選擇產生憑證以產生憑證。API Gateway 隨即會產生新的憑證,並傳回新憑證 GUID 以及 PEM 編碼的公開金鑰。

您現在已經準備好設定 API 來使用憑證。

設定 API 來使用 SSL 憑證

以下說明假設您已完成使用 API Gateway 主控台產生用戶端憑證中的步驟。

  1. 在 API Gateway 主控台中,建立或開啟要使用用戶端憑證的 API。請確定 API 已部署至階段。

  2. 在主導覽窗格中,選擇階段

  3. 階段詳細資訊區段中,選擇編輯

  4. 針對用戶端憑證,選取一個憑證。

  5. 選擇 Save changes (儲存變更)

    如果您先前已在 API Gateway 主控台中部署 API,就必須重新部署該 API,變更才會生效。如需詳細資訊,請參閱 將 REST API 重新部署至階段

選取並儲存 API 的憑證後,API Gateway 會將該憑證用於 API 中的所有 HTTP 整合呼叫。

測試叫用以驗證用戶端憑證組態

  1. 選擇 API 方法。選擇 測試 標籤。您可能需要選擇向右箭頭按鈕才能顯示測試索引標籤。

  2. 針對用戶端憑證,選取一個憑證。

  3. 選擇 測試

API Gateway 會顯示所選擇的 SSL 憑證,讓 HTTP 後端系統對 API 進行身分驗證。

設定後端 HTTPS 伺服器以驗證用戶端憑證

以下說明假設您已完成使用 API Gateway 主控台產生用戶端憑證中的步驟,且已下載用戶端憑證的複本。若要下載用戶端憑證,您可以呼叫 API Gateway REST API 的 clientcertificate:by-id 或 AWS CLI 的 get-client-certificate

在設定後端 HTTPS 伺服器以驗證 API Gateway 的用戶端 SSL 憑證之前,請務必取得 PEM 編碼的私密金鑰,以及由受信任之憑證授權機構提供的伺服器端憑證。

如果伺服器網域名稱為 myserver.mydomain.com,則伺服器憑證的 CNAME 值必須為 myserver.mydomain.com*.mydomain.com

支援的憑證授權單位包括 Let's EncryptAPI Gateway 支援的 HTTP 與 HTTP 代理整合憑證授權機構 其中之一。

例如,假設用戶端憑證檔案是 apig-cert.pem,而伺服器私密金鑰和憑證檔案分別為 server-key.pemserver-cert.pem。對於後端的 Node.js 伺服器,您可以設定類似於以下內容的伺服器:

var fs = require('fs'); var https = require('https'); var options = { key: fs.readFileSync('server-key.pem'), cert: fs.readFileSync('server-cert.pem'), ca: fs.readFileSync('apig-cert.pem'), requestCert: true, rejectUnauthorized: true }; https.createServer(options, function (req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(443);

針對節點-express 應用程式,您可以使用 client-certificate-auth 模組,透過 PEM 編碼憑證來驗證用戶端請求。

針對其他 HTTPS 伺服器,請參閱伺服器的文件。

輪換到期的用戶端憑證

由 API Gateway 產生的用戶端憑證有效時間為 365 天。您必須在 API 階段的用戶端憑證過期之前輪換憑證,以避免 API 停機。您可以檢查憑證的過期日期,方法是呼叫 API Gateway REST API 的 clientCertificate:by-idget-client-certificate 的 AWS CLI 命令,並檢查傳回的 expirationDate 屬性。

若要輪換用戶端憑證,請執行下列作業:

  1. 產生新的用戶端憑證,方法是呼叫 API Gateway REST API 的 clientcertificate:generategenerate-client-certificate 的 AWS CLI 命令。在本教學中,我們將假設新的用戶端憑證 ID 為 ndiqef

  2. 更新後端伺服器以納入新的用戶端憑證。請先不要移除現有的用戶端憑證。

    有些伺服器可能需要重新啟動以完成更新。請參閱伺服器文件,確認更新期間是否需要重新啟動伺服器。

  3. 更新 API 階段以使用新的用戶端憑證,方法是以新的用戶端憑證 ID (ndiqef) 呼叫 API Gateway REST API 的 stage:update,如下所示:

    PATCH /restapis/{restapi-id}/stages/stage1 HTTP/1.1 Content-Type: application/json Host: apigateway.us-east-1.amazonaws.com X-Amz-Date: 20170603T200400Z Authorization: AWS4-HMAC-SHA256 Credential=... { "patchOperations" : [ { "op" : "replace", "path" : "/clientCertificateId", "value" : "ndiqef" } ] }

    或者,您也可以呼叫 update-stage CLI 命令。

  4. 更新後端伺服器以移除舊的用戶端憑證。

  5. 從 API Gateway 刪除舊憑證,方法是呼叫 API Gateway REST API 的 clientcertificate:delete,並指定舊憑證的 clientCertificateId (a1b2c3),如下所示:

    DELETE /clientcertificates/a1b2c3

    或者,您也可以呼叫 delete-client-certificate CLI 命令:

    aws apigateway delete-client-certificate --client-certificate-id a1b2c3

若要在主控台中針對先前部署的 API 輪換用戶端憑證,請執行下列作業:

  1. 在主導覽窗格中,選擇用戶端憑證

  2. 用戶端憑證窗格,選擇產生憑證

  3. 開啟您要對其使用用戶端憑證的 API。

  4. 在所選取的 API 下選擇 Stages (階段),然後選擇階段。

  5. 階段詳細資訊區段中,選擇編輯

  6. 針對用戶端憑證,選取新的憑證。

  7. 若要儲存設定,請選擇儲存變更

    您需要重新部署 API,變更才會生效。如需詳細資訊,請參閱 將 REST API 重新部署至階段