

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

# 在 IAM 中管理伺服器憑證
<a name="id_credentials_server-certs"></a>

若要在 中啟用網站或應用程式的 HTTPS 連線 AWS，您需要 SSL/TLS *伺服器憑證*。處理 AWS Certificate Manager (ACM) 可支援區域中的憑證時，我們建議您使用 ACM 來佈建、管理和部署您的伺服器憑證。在不支援的區域中，您必須使用 IAM 作為憑證管理員。如需了解 ACM 支援哪些區域，請參閱 *AWS 一般參考* 中的 [AWS Certificate Manager 端點和配額](https://docs.aws.amazon.com/general/latest/gr/acm.html)。

**重要**  
ACM 為佈建、管理和部署伺服器憑證的首選工具。使用 ACM，您可以請求憑證或將現有的 ACM 或外部憑證部署至 AWS 資源。ACM 提供的憑證為免費且會自動續約。在[支援的區域](https://docs.aws.amazon.com/general/latest/gr/acm.html)中，您可以使用 ACM 從主控台或以程式設計方式管理伺服器憑證。如需有關 ACM 的詳細資訊，請參閱 [https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html)。如需有關請求 ACM 憑證的詳細資訊，請參閱 *AWS Certificate Manager 使用者指南*中的[請求公有憑證](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html)或[請求私有憑證](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-private.html)。如需有關將第三方憑證匯入 ACM 的詳細資訊，請參閱《*AWS Certificate Manager 使用者指南*》中的[匯入憑證](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)。

只有當您必須在 [ACM 不支援](https://docs.aws.amazon.com/general/latest/gr/acm.html)的區域中支援 HTTPS 連接時，才應使用 IAM 作為憑證管理器。IAM 會安全地加密您的私有金鑰並將加密的版本儲存在 IAM SSL 憑證存放區中。IAM 支援在所有區域中部署伺服器憑證，但您必須從外部供應商取得憑證以搭配 使用 AWS。不能將 ACM 憑證上傳到 IAM。此外，也無法從 IAM 主控台管理憑證，

如需有關如何將第三方憑證上傳到 IAM 的詳細資訊，請參閱下列主題。

**Topics**
+ [上傳伺服器憑證 (AWS API)](#upload-server-certificate)
+ [AWS 伺服器憑證的 API 操作](#id_credentials_server-certs-api)
+ [對伺服器憑證進行疑難排解](#server-certificate-troubleshooting)

## 上傳伺服器憑證 (AWS API)
<a name="upload-server-certificate"></a>

若要將伺服器憑證上傳至 IAM，您必須提供憑證及相符的私有金鑰。當憑證並非自我簽署憑證時，您還必須提供憑證鏈。(上傳自簽署憑證時無需憑證連結。) 在上傳憑證前，請確保您已具有所有這些項目且滿足以下條件：
+ 憑證在上傳時必須有效。您不能在憑證有效期開始 (憑證的 `NotBefore` 日期) 之前或憑證有效期到期 (憑證的 `NotAfter` 日期) 之後上傳憑證。
+ 私有金鑰必須為未加密。您無法上傳受密碼或複雜密碼保護的私有金鑰。有關解密已加密的私有金鑰的說明資訊，請參閱 [對伺服器憑證進行疑難排解](#server-certificate-troubleshooting)。
+ 憑證、私有金鑰和憑證鏈全都必須採用 PEM 編碼。有關將這些項目轉換為 PEM 格式的說明資訊，請參閱 [對伺服器憑證進行疑難排解](#server-certificate-troubleshooting)。

若要使用 [IAM API](https://docs.aws.amazon.com/IAM/latest/APIReference/) 上傳憑證，請傳送 [UploadServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UploadServerCertificate.html) 請求。以下範例顯示如何使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/) 執行此作業。該範例假設如下：
+ PEM 編碼的憑證存放在名為 `Certificate.pem` 的檔案中。
+ PEM 編碼的憑證鏈存放在名為 `CertificateChain.pem` 的檔案中。
+ PEM 編碼的未加密私有金鑰存放在名為 `PrivateKey.pem` 的檔案中。
+ (選用) 您要使用鍵值組來標記伺服器憑證。例如，您可以新增標籤金鑰 `Department` 和標籤值 `Engineering`，以協助您識別和整理憑證。

若要使用下列範例命令，請將這些檔案名稱取代為您自己的檔案名稱。使用您上傳憑證的名稱取代 *ExampleCertificate*。如果您要標記憑證，請將 *ExampleKey* 和 *ExampleValue* 標籤鍵值組取代為您自己的值。在連續的一行中輸入命令。為方便閱讀，以下範例包含分行符號和多餘的空格。

```
aws iam upload-server-certificate --server-certificate-name ExampleCertificate
                                    --certificate-body file://Certificate.pem
                                    --certificate-chain file://CertificateChain.pem
                                    --private-key file://PrivateKey.pem
                                    --tags '{"Key": "ExampleKey", "Value": "ExampleValue"}'
```

如果上述命令執行成功，則它將傳回上傳憑證的相關中繼資料，包括其 [Amazon Resource Name (ARN)](reference_identifiers.md#identifiers-arns)、易記名稱、識別符 (ID)、過期日期、標籤等。

**注意**  
如果您要上傳用於 Amazon CloudFront 的伺服器憑證，則必須使用 `--path` 選項指定路徑。路徑必須以 `/cloudfront` 開頭，且必須包含結尾反斜線 (例如，`/cloudfront/test/`)。

若要使用 AWS Tools for Windows PowerShell 上傳憑證，請使用 [Publish-IAMServerCertificate](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=Publish-IAMServerCertificate.html&tocid=Publish-IAMServerCertificate)。

## AWS 伺服器憑證的 API 操作
<a name="id_credentials_server-certs-api"></a>

使用下列命令來檢視、標記、重新命名及刪除伺服器憑證。
+ 使用 [GetServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServerCertificate.html) 來擷取憑證。此請求將傳回憑證、憑證鏈 (如果已上傳一個) 和有關憑證的中繼資料。
**注意**  
在您上傳後，無法從 IAM 下載或擷取私有金鑰。
+ 使用 [Get-IAMServerCertificate](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=Get-IAMServerCertificate.html&tocid=Get-IAMServerCertificate) 來擷取憑證。
+ 使用 [ListServerCertificates](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListServerCertificates.html) 來列出您已上傳的伺服器憑證。請求會傳回包含有關每個憑證的中繼資料的清單。
+ 使用 [Get-IAMServerCertificates](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=Get-IAMServerCertificates.html&tocid=Get-IAMServerCertificates) 來列出您已上傳的伺服器憑證。
+ 使用 [TagServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_TagServerCertificate.html) 來標記現有的伺服器憑證。
+ 使用 [UntagServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UntagServerCertificate.html) 來取消標記伺服器憑證。
+ 使用 [UpdateServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateServerCertificate.html) 來重新命名伺服器憑證或更新其路徑。

   以下範例顯示如何使用 AWS CLI執行此作業。

  若要使用以下範例指令，請將取代舊與新的憑證名稱與憑證路徑，並在連續的一行中輸入命令。為方便閱讀，以下範例包含分行符號和多餘的空格。

  ```
  aws iam update-server-certificate --server-certificate-name ExampleCertificate
                                      --new-server-certificate-name CloudFrontCertificate
                                      --new-path /cloudfront/
  ```

  若要使用 AWS Tools for Windows PowerShell 重新命名伺服器憑證或更新其路徑，請使用 [Update-IAMServerCertificate](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=Update-IAMServerCertificate.html&tocid=Update-IAMServerCertificate)。
+ 使用 [DeleteServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServerCertificate.html) 來刪除伺服器憑證。

  若要使用 AWS Tools for Windows PowerShell 刪除伺服器憑證，請使用 [Remove-IAMServerCertificate](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=Remove-IAMServerCertificate.html&tocid=Remove-IAMServerCertificate)。

## 對伺服器憑證進行疑難排解
<a name="server-certificate-troubleshooting"></a>

您必須先確保憑證、私有金鑰和憑證連結均使用 PEM 編碼，然後才能將憑證上傳到 IAM。您還必須確保私有金鑰為未加密。請參閱以下範例。

**Example PEM 編碼憑證範例**  

```
-----BEGIN CERTIFICATE-----
Base64-encoded certificate
-----END CERTIFICATE-----
```

**Example PEM 編碼的未加密私有金鑰範例**  

```
-----BEGIN RSA PRIVATE KEY-----
Base64-encoded private key
-----END RSA PRIVATE KEY-----
```

**Example PEM 編碼的憑證鏈範例**  
憑證鏈包含一或多個憑證。您可以使用文字編輯器、Windows 的 copy 命令，或 Linux cat 命令，將憑證檔案串連為憑證鏈。當您包含多個憑證時，每個憑證必須認證先前的憑證。您可以透過串連憑證 (包含上一個根 CA 憑證) 來完成此動作。  
以下範例包含三個憑證，但您的憑證鏈可包含更多或更少憑證。  

```
-----BEGIN CERTIFICATE-----
Base64-encoded certificate
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Base64-encoded certificate
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Base64-encoded certificate
-----END CERTIFICATE-----
```

如果這些項目在上傳到 IAM 時未採用正確的格式，您可以使用 [OpenSSL](https://openssl.org/) 將其轉換為正確的格式。

**將憑證或憑證鍊從 DER 轉換為 PEM**  
使用 [OpenSSL **x509** 命令](https://openssl.org/docs/manmaster/man1/x509.html)，如下列範例。在以下範例命令中，將 `Certificate.der` 替換為包含您的 DER 編碼的憑證檔案的名稱。以偏好的輸出檔案名稱取代 `Certificate.pem`，以包含 PEM 編碼的憑證。  

```
openssl x509 -inform DER -in Certificate.der -outform PEM -out Certificate.pem
```
 

**若要將私有金鑰從 DER 轉換為 PEM**  
使用 [OpenSSL **rsa** 命令](https://openssl.org/docs/manmaster/man1/rsa.html)，如下列範例。在以下範例命令中，將 `PrivateKey.der` 替換為包含您的 DER 編碼的私有金鑰檔案的名稱。以偏好的輸出檔案名稱取代 `PrivateKey.pem`，以包含 PEM 編碼的私有金鑰。  

```
openssl rsa -inform DER -in PrivateKey.der -outform PEM -out PrivateKey.pem
```
 

**解密已加密的私有金鑰 (移除密碼或密碼短語)**  
使用 [OpenSSL **rsa** 命令](https://openssl.org/docs/manmaster/man1/rsa.html)，如下列範例。若要使用以下範例命令，將 `EncryptedPrivateKey.pem` 替換為包含您的已加密私有金鑰檔案的名稱。以偏好的輸出檔案名稱取代 `PrivateKey.pem`，以包含 PEM 編碼的未加密私有金鑰。  

```
openssl rsa -in EncryptedPrivateKey.pem -out PrivateKey.pem
```
 

**將憑證 bundle 從 PKCS\$112 (PFX) 轉換為 PEM**  
使用 [OpenSSL **pkcs12** 命令](https://openssl.org/docs/manmaster/man1/pkcs12.html)，如下列範例。在以下範例命令中，將 `CertificateBundle.p12` 替換為包含您的 PKCS\$112 編碼的憑證 bundle 的名稱。以偏好的輸出檔案名稱取代 `CertificateBundle.pem`，以包含 PEM 編碼的憑證 bundle。  

```
openssl pkcs12 -in CertificateBundle.p12 -out CertificateBundle.pem -nodes
```
 

**將憑證 bundle 從 PKCS\$17 轉換為 PEM**  
使用 [OpenSSL **pkcs7** 命令](https://openssl.org/docs/manmaster/man1/pkcs7.html)，如下列範例。在以下範例命令中，將 `CertificateBundle.p7b` 替換為包含您的 PKCS\$17 編碼的憑證 bundle 的名稱。以偏好的輸出檔案名稱取代 `CertificateBundle.pem`，以包含 PEM 編碼的憑證 bundle。  

```
openssl pkcs7 -in CertificateBundle.p7b -print_certs -out CertificateBundle.pem
```