

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

# 伺服器憑證
<a name="configuring-https.certificate"></a>

本主題說明您可以用來設定 HTTPS 的不同憑證類型，以及何時套用每個憑證。本節中的子主題提供建立您自己的憑證以及如何上傳的指示。

**AWS Certificate Manager (ACM)**  
ACM 為佈建、管理和部署伺服器憑證的首選工具。您可以編寫程式或使用 執行此操作 AWS CLI。使用 ACM，您可以免費為網域名稱建立信任的憑證。

 ACM 憑證只能與 AWS 負載平衡器和 Amazon CloudFront 分佈搭配使用，且 ACM 僅適用於特定 AWS 區域。若要將 ACM 憑證與 Elastic Beanstalk 搭配使用，請參閱[在負載平衡器設定 HTTPS 終止](configuring-https-elb.md)。如需 ACM 的詳細資訊，請參閱 [https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html)。

**注意**  
 如需可使用 ACM 的區域清單，請參閱《》中的 [ACM 端點和配額](https://docs.aws.amazon.com/general/latest/gr/acm.html)*Amazon Web Services 一般參考*。

如果您的 AWS 區域無法使用 ACM，您可以將第三方或自我簽署憑證和私有金鑰上傳至 AWS Identity and Access Management (IAM)。您可以使用 AWS CLI 上傳憑證。儲存於 IAM 中的憑證可搭配負載平衡器和 CloudFront 分佈使用。如需詳細資訊，請參閱[上傳憑證到 IAM](configuring-https-ssl-upload.md)。

**第三方憑證**  
如果您所在的區域未提供 ACM 服務，您可以向第三方購買受信任的憑證。第三方憑證可用來針對您負載平衡器或後端執行個體或這兩者上的 HTTPS 傳輸資料，進行解密的動作。

**已自我簽署的憑證**  
若要進行開發與測試，您可以使用開放原始碼工具，來自行[建立和簽署憑證](configuring-https-ssl.md)。自我簽署的憑證易於建立而且免費，但無法用於公有網站上的前端解密。如果您試著針對與用戶端的 HTTPS 連線來使用自我簽署的憑證，則使用者的瀏覽器將會顯示錯誤訊息，告知您的網站並不安全。不過，您可以使用自我簽署的憑證來保護後端連線，而不會出現問題。

# 建立和簽署 X509 憑證
<a name="configuring-https-ssl"></a>

您可以使用 `OpenSSL` 來建立您應用程式適用的 X509 憑證。OpenSSL 是一個標準的開放原始碼程式庫，支援多種加密功能，包括建立和簽署 x509 憑證。如需關於 OpenSSL 的詳細資訊，請造訪 [www.openssl.org](https://www.openssl.org/)。

**注意**  
如果您想[在單一執行個體的環境中使用 HTTPS](https-singleinstance.md)，或是使用自我簽署的憑證來[在後端重新加密](configuring-https-endtoend.md)，只需要在本機建立憑證即可。如果您擁有網域名稱，您可以在 中建立憑證， AWS 並使用 AWS Certificate Manager (ACM) 免費搭配負載平衡環境使用。如需相關說明，請參閱 *AWS Certificate Manager 使用者指南*中的[請求憑證](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request.html)。

在命令列中執行 `openssl version`，來檢視是否已安裝 OpenSSL。如果尚未安裝，您可以根據[公有 GitHub 儲存庫](https://github.com/openssl/openssl)的說明，或使用您偏好的套件軟體管理工具，來建置和安裝原始程式碼。OpenSSL 也會安裝在 Elastic Beanstalk 的 Linux 映像上，所以一項快速的替代方法是使用 [EB CLI](eb-cli3.md) 的 **eb ssh** 命令，來連線到正在運作環境中的 EC2 執行個體：

```
~/eb$ eb ssh
[ec2-user@ip-255-55-55-255 ~]$ openssl version
OpenSSL 1.0.1k-fips 8 Jan 2015
```

您需要建立 RSA 私有金鑰，來產生您的憑證簽署請求 (CSR)。若要建立您的私密金鑰，請使用 **openssl genrsa** 命令：

```
[ec2-user@ip-255-55-55-255 ~]$ openssl genrsa 2048 > privatekey.pem
Generating RSA private key, 2048 bit long modulus
.................................................................................................................................+++
...............+++
e is 65537 (0x10001)
```

*privatekey.pem*  
您想要在其中儲存私有金鑰的檔案的名稱。一般而言，**openssl genrsa** 命令會將私密金鑰的內容印出到畫面上，但此命令會將輸出內容導向檔案。選擇任意的檔案名稱，並將檔案儲存到安全的位置，以供日後擷取。如果您遺失私有金鑰，就無法使用您的憑證。

CSR 是一種檔案，您會將此等檔案傳送到憑證認證機構 (CA)，以申請數位伺服器憑證。若要建立 CSR，請使用 **openssl req** 命令：

```
$ openssl req -new -key privatekey.pem -out csr.pem
You are about to be asked to enter information that will be incorporated 
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
```

輸入要求填寫的資訊，然後按下 **Enter (Enter)** 鍵。下表說明和顯示了每個欄位的範例：


****  

| 名稱 | 描述 | 範例 | 
| --- | --- | --- | 
| Country Name (國家/地區名稱) | 兩個字母的 ISO 縮寫，用來代表您的國家/地區。 | US = 美國 | 
| State or Province (州或省) | 您組織位在的州名或省名。此名稱不得縮寫。 | 華盛頓州 | 
| Locality Name (地區名稱) | 您組織所在城市的名稱。 | 西雅圖 | 
| Organization Name (組織名稱) | 您組織的完整法定名稱。請不要使用您組織名稱的縮寫。 | 範例公司 | 
| 組織單位 | 選填，這是額外的組織資訊。 | Marketing | 
| Common Name (通用名稱) | 您網站的完整網域名稱。此名稱必須符合使用者造訪您網站時所看到的網域名稱，否則將會顯示憑證錯誤。 | www.example.com | 
| 電子郵件地址 | 網站管理員的電子郵件地址。 | someone@example.com | 

您可以向第三方提交簽署請求來進行簽署，或是針對開發和測試用途自行簽署。自我簽署的憑證也可用於負載平衡器與 EC2 執行個體之間的後端 HTTPS。

若要簽署憑證，請使用 **openssl x509** 命令。下例使用前一步驟的私密金鑰 (*privatekey.pem*) 和簽署請求 (*csr.pem*)，建立名為 *public.crt* 的公有憑證，其有效期限為 *365* 天。

```
$ openssl x509 -req -days 365 -in csr.pem -signkey privatekey.pem -out public.crt
Signature ok
subject=/C=us/ST=washington/L=seattle/O=example corporation/OU=marketing/CN=www.example.com/emailAddress=someone@example.com
Getting Private key
```

保留私有金鑰和公有憑證以供日後使用。您可以放棄簽署請求。一律[將私密金鑰儲存於安全的位置](https-storingprivatekeys.md)，並且避免將該金鑰加入您的原始程式碼中。

若要在 Windows Server 平台上使用憑證，您必須將憑證轉換為 PFX 格式。利用下列指令，從私有金鑰和公有憑證檔案來產生 PFX 憑證：

```
$ openssl pkcs12 -export -out example.com.pfx -inkey privatekey.pem -in public.crt
Enter Export Password: password
Verifying - Enter Export Password: password
```

當您擁有憑證後，可以[將憑證上傳至 IAM](configuring-https-ssl-upload.md)，以搭配負載平衡器使用，或是[在您的環境中設定執行個體以終止 HTTPS](https-singleinstance.md)。

# 上傳憑證到 IAM
<a name="configuring-https-ssl-upload"></a>

若要將憑證與 Elastic Beanstalk 環境的負載平衡器搭配使用，請將憑證和私有金鑰上傳至 AWS Identity and Access Management (IAM)。您可以使用儲存在 IAM 中的憑證，搭配 Elastic Load Balancing 負載平衡器和 Amazon CloudFront 分佈使用。

**注意**  
AWS Certificate Manager (ACM) 是佈建、管理和部署伺服器憑證的偏好工具。如需請求 ACM 憑證的詳細資訊，請參閱《*AWS Certificate Manager 使用者指南*》中的[請求憑證](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request.html)。如需有關將第三方憑證匯入 ACM 的詳細資訊，請參閱《*AWS Certificate Manager 使用者指南*》中的[匯入憑證](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)。只有在[您的 AWS 區域無法使用](https://docs.aws.amazon.com/general/latest/gr/acm.html) ACM 時，才能使用 IAM 上傳憑證。

您可以使用 AWS Command Line Interface (AWS CLI) 上傳您的憑證。下列命令會上傳名為 *https-cert.crt* 的自我簽署憑證，以及名為 *private-key.pem* 的私密金鑰：

```
$ aws iam upload-server-certificate --server-certificate-name elastic-beanstalk-x509 --certificate-body file://https-cert.crt --private-key file://private-key.pem
{
    "ServerCertificateMetadata": {
        "ServerCertificateId": "AS5YBEIONO2Q7CAIHKNGC",
        "ServerCertificateName": "elastic-beanstalk-x509",
        "Expiration": "2017-01-31T23:06:22Z",
        "Path": "/",
        "Arn": "arn:aws:iam::123456789012:server-certificate/elastic-beanstalk-x509",
        "UploadDate": "2016-02-01T23:10:34.167Z"
    }
}
```

`file://` 字首指示 AWS CLI 載入目前目錄中的檔案內容。 *elastic-beanstalk-x509* 指定在 IAM 中呼叫憑證的名稱。

若您自憑證授權機構購買憑證並收到憑證鏈檔案，請納入 `--certificate-chain` 選項將其一同上傳：

```
$ aws iam upload-server-certificate --server-certificate-name elastic-beanstalk-x509 --certificate-chain file://certificate-chain.pem --certificate-body file://https-cert.crt --private-key file://private-key.pem
```

請記下您的憑證的 Amazon Resource Name (ARN)。更新負載平衡器組態設定以使用 HTTPS 時，將使用該 ARN。

**注意**  
上傳到 IAM 的憑證將持續存放，即使未來不會在任何環境的負載平衡器中使用。其中包含敏感資料。如果任何環境都不再需要此憑證，請務必刪除它。如需關於從 IAM 刪除憑證的詳細資訊，請參閱[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html#delete-server-certificate](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html#delete-server-certificate)。

如需 IAM 中伺服器憑證的詳細資訊，請參閱《*IAM 使用者指南*》中的[使用伺服器憑證](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html)。

# 將私有金鑰安全地儲存於 Amazon S3 中
<a name="https-storingprivatekeys"></a>

您用來簽署公有憑證的私密金鑰是私有的，不應直接寫在原始程式碼中。您可以將私有金鑰上傳到 Amazon S3，然後設定 Elastic Beanstalk 在部署應用程式時從 Amazon S3 下載檔案，來避免將私有金鑰儲存於組態檔案中。

下列範例顯示[組態檔案](ebextensions.md)[的資源](environment-resources.md)和[檔案](customize-containers-ec2.md#linux-files)區段會從 Amazon S3 儲存貯體下載私有金鑰檔案。

**Example .ebextensions/privatekey.config**  

```
Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          type: "s3"
          buckets: ["elasticbeanstalk-us-west-2-123456789012"]
          roleName: 
            "Fn::GetOptionSetting": 
              Namespace: "aws:autoscaling:launchconfiguration"
              OptionName: "IamInstanceProfile"
              DefaultValue: "aws-elasticbeanstalk-ec2-role"
files:
  # Private key
  "/etc/pki/tls/certs/server.key":
    mode: "000400"
    owner: root
    group: root
    authentication: "S3Auth"
    source: https://elasticbeanstalk-us-west-2-123456789012.s3.us-west-2.amazonaws.com/server.key
```

用您自己的資料取代範例中的儲存貯體名稱和 URL。這個檔案中的第一個項目，將名為 `S3Auth` 的身分驗證方法，加進了環境的 Auto Scaling 群組的中繼資料。如果您已經為環境設定了自訂的[執行個體描述檔](concepts-roles-instance.md)，將會使用該設定檔，否則就會套用 `aws-elasticbeanstalk-ec2-role` 的預設值。預設的執行個體描述檔具有權限，可從 Elastic Beanstalk 儲存貯體讀取。如果您使用不同的儲存貯體，[請新增權限到執行個體描述檔](iam-instanceprofile.md#iam-instanceprofile-addperms)。

第二個項目會使用 `S3Auth` 身分驗證方法，來從指定的 URL 下載私有金鑰，然後將金鑰儲存至 `/etc/pki/tls/certs/server.key`。之後，代理伺服器即可從此位置讀取私密金鑰，以[終止執行個體的 HTTPS 連線](https-singleinstance.md)。

指派給您環境的 EC2 執行個體的執行個體描述檔，必須擁有權限，以從指定的儲存貯體讀取金鑰物件。[請確定執行個體描述檔具有許可](iam-instanceprofile.md#iam-instanceprofile-verify)，能夠讀取 IAM 中的物件，而且儲存貯體和物件上的許可不會禁止執行個體描述檔。

**若要查看儲存貯體的權限**

1. 開啟 [Amazon S3 管理主控台](https://console.aws.amazon.com/s3/home)。

1. 選擇儲存貯體。

1. 選擇 **Properties (屬性)**，然後選擇 **Permissions (權限)**。

1. 確認您的帳戶是儲存貯體上的承授者，具備讀取權限。

1. 如果已連接儲存貯體政策，請選擇 **Bucket policy (儲存貯體政策)**，以檢視已指派給儲存貯體的許可。