

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

# 使用 SSL
<a name="workingsecurity-ssl"></a>

**重要**  
 AWS OpsWorks Stacks 此服務已於 2024 年 5 月 26 日終止，並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載遷移至其他解決方案。如果您對遷移有任何疑問，請透過 [AWS re：Post](https://repost.aws/) 或透過 [AWS Premium Support](https://aws.amazon.com/support) 聯絡 AWS 支援 團隊。

若要搭配使用 SSL 與您的應用程式，您必須先從憑證授權機構 (CA) 取得數位伺服器憑證。為求簡化，本演練會建立憑證，然後對它自我簽署。自簽憑證適用於學習和測試，但您應該一律使用由 CA 針對生產堆疊所簽署的憑證。

在本演練中，您將會執行下列作業：

1. 安裝及設定 OpenSSL。

1. 建立私有金鑰。

1. 建立憑證簽署請求。

1. 產生自簽憑證。

1. 使用您的憑證資訊編輯應用程式。

**重要**  
如果您的應用程式使用 SSL，則建議您盡可能在應用程式伺服器 layer 中停用 SSLv3 來處理 [CVE-2014-3566](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2014-3566) 中所述的漏洞。如果您的堆疊包含 Ganglia 層，您也應該停用該層的 SSL v3。詳細資訊取決於特定 layer；如需詳細資訊，請參閱下列項目。  
[Java 應用程式伺服器 OpsWorks 堆疊層](layers-java.md)
[Node.js 應用程式伺服器 OpsWorks 堆疊層](workinglayers-node.md)
[PHP 應用程式伺服器 OpsWorks 堆疊層](workinglayers-php.md)
[Rails 應用程式伺服器 OpsWorks 堆疊層](workinglayers-rails.md)
[靜態 Web 伺服器 OpsWorks 堆疊層](workinglayers-static.md)
[Ganglia 層](workinglayers-ganglia.md)

**Topics**
+ [步驟 1：安裝和設定 OpenSSL](#w2ab1c14c57c29c15)
+ [步驟 2：建立私有金鑰](#w2ab1c14c57c29c17)
+ [步驟 3：建立憑證簽署請求](#w2ab1c14c57c29c19)
+ [步驟 4：將 CSR 提交至憑證授權機構](#w2ab1c14c57c29c21)
+ [步驟 5：編輯應用程式](#w2ab1c14c57c29c23)

## 步驟 1：安裝和設定 OpenSSL
<a name="w2ab1c14c57c29c15"></a>

建立和上傳伺服器憑證需要支援 SSL 和 TLS 通訊協定的工具。OpenSSL 是一種開放原始碼工具，可提供建立 RSA 字符並使用私有金鑰簽署它所需的基本加密函數。

 下列程序假設您的電腦尚未安裝 OpenSSL。

**在 Linux 和 Unix 上安裝 OpenSSL**

1. 前往 [OpenSSL: Source, Tarballs](https://www.openssl.org/source/)。

1. 下載最新原始碼。

1. 建置套件。

**在 Windows 安裝 OpenSSL**

1. 如果您的系統尚未安裝 Microsoft Visual C\$1\$1 2008 可轉散發套件，請下載[套件](https://www.microsoft.com/en-us/download/details.aspx?id=11895)。

1. 執行安裝程式，並遵循 Microsoft Visual C\$1\$1 2008 Redistributable Setup Wizard (Microsoft Visual C\$1\$1 2008 可轉散發套件設定精靈) 所提供的說明來安裝可轉散發套件。

1. 前往 [OpenSSL: Binary Distributions](https://www.openssl.org/community/binaries.html)，並按一下您環境適用的 OpenSSL 二進位檔版本，並在本機儲存安裝程式。

1. 執行安裝程式，並遵循 **OpenSSL Setup Wizard (OpenSSL 設定精靈)** 中的說明來安裝二進位檔。

開啟終端機或命令視窗，並使用下列命令列，以建立指向 OpenSSL 安裝點的環境變數。
+ 在 Linux 和 Unix 上

  ```
  export OpenSSL_HOME=path_to_your_OpenSSL_installation
  ```
+ 在 Windows 上

  ```
  set OpenSSL_HOME=path_to_your_OpenSSL_installation 
  ```

開啟終端機或命令視窗，並使用下列命令列，以將 OpenSSL 二進位檔的路徑新增至您電腦的路徑變數。
+ 在 Linux 和 Unix 上

  ```
  export PATH=$PATH:$OpenSSL_HOME/bin 
  ```
+ 在 Windows 上

  ```
  set Path=OpenSSL_HOME\bin;%Path% 
  ```

**注意**  
您使用這些命令列對環境變數做出的任何變更，僅適用於目前命令列工作階段。

## 步驟 2：建立私有金鑰
<a name="w2ab1c14c57c29c17"></a>

您需要有唯一私有金鑰才能建立憑證簽署請求 (CSR)。使用下列命令列來建立金鑰：

```
openssl genrsa 2048 > privatekey.pem
```

## 步驟 3：建立憑證簽署請求
<a name="w2ab1c14c57c29c19"></a>

憑證簽署請求 (CSR) 是一種檔案，可傳送至憑證授權機構 (CA) 以申請數位伺服器憑證。使用下列命令列來建立 CSR。

```
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.
```

下表可協助您建立憑證請求。


**憑證請求資料**  

| 名稱 | 描述 | 範例 | 
| --- | --- | --- | 
| Country Name (國家/地區名稱) | 兩個字母的 ISO 縮寫，用來代表您的國家/地區。 | US = 美國 | 
| State or Province (州或省) | 您組織位在的州名或省名。此名稱不得使用縮寫。 | 華盛頓州 | 
| Locality Name (地區名稱) | 您組織所在城市的名稱。 | 西雅圖 | 
| Organization Name (組織名稱) | 您組織的完整法定名稱。請不要使用您組織名稱的縮寫。 | CorporationX | 
| 組織單位 | (選用) 這是額外的組織資訊。 | Marketing | 
| Common Name (通用名稱) | 您 CNAME 的完整網域名稱。如果這不是完全相符的項目，則您會收到憑證名稱檢查警告。 | www.example.com | 
| 電子郵件地址 | 伺服器管理員的電子郵件地址。 | someone@example.com | 

**注意**  
Common Name (通用名稱) 欄位容易遭人誤解，因此完全不正確。通用名稱一般是您的主機加上網域名稱。它看起來像是 "www.example.com" 或 "example.com"。您需要使用正確的通用名稱來建立 CSR。

## 步驟 4：將 CSR 提交至憑證授權機構
<a name="w2ab1c14c57c29c21"></a>

針對生產用途，您可以將 CSR 提交至憑證授權機構 (CA) 來取得伺服器憑證，這可能需要其他登入資料或身分證明。如果您的應用程式成功，則 CA 會傳回數位簽署的身分憑證，因此可能是憑證鏈檔案。AWS 不建議使用特定 CA。如需可用 CA 的部分清單，請參閱 Wikipedia 上的 [Certificate Authority - Providers](https://en.wikipedia.org/wiki/Certificate_authority#Providers)。

您也可以產生自簽憑證，以用於測試目的。在此範例中，使用下列命令列產生自簽憑證。

```
openssl x509 -req -days 365 -in csr.pem -signkey privatekey.pem -out server.crt
```

輸出格式應類似以下內容：

```
Loading 'screen' into random state - done
Signature ok
subject=/C=us/ST=washington/L=seattle/O=corporationx/OU=marketing/CN=example.com/emailAddress=someone@example.com
Getting Private key
```

## 步驟 5：編輯應用程式
<a name="w2ab1c14c57c29c23"></a>

在您產生並簽署憑證之後，請更新應用程式以啟用 SSL，並提供憑證資訊。在 **Apps (應用程式)** 頁面上，選擇應用程式以開啟詳細資訊頁面，然後按一下 **Edit App (編輯應用程式)**。若要啟用 SSL 支援，請將 **Enable SSL (啟用 SSL)** 設為 **Yes (是)**，以顯示下列組態選項。

**SSL 憑證**  
將公有金鑰憑證 (.crt) 檔案的內容貼入方塊中。憑證看起來應該與下列類似：  

```
-----BEGIN CERTIFICATE-----
MIICuTCCAiICCQCtqFKItVQJpzANBgkqhkiG9w0BAQUFADCBoDELMAkGA1UEBhMC
dXMxEzARBgNVBAgMCndhc2hpbmd0b24xEDAOBgNVBAcMB3NlYXR0bGUxDzANBgNV
BAoMBmFtYXpvbjEWMBQGA1UECwwNRGV2IGFuZCBUb29sczEdMBsGA1UEAwwUc3Rl
cGhhbmllYXBpZXJjZS5jb20xIjAgBgkqhkiG9w0BCQEWE3NhcGllcmNlQGFtYXpv
...
-----END CERTIFICATE-----
```
如果您使用 Nginx 並且具有憑證鏈檔案，則應該將內容附加到公有金鑰憑證檔案。
如果您更新現有憑證，則請執行下列動作：  
+ 選擇 **Update SSL certificate (更新 SSL 憑證)** 來更新憑證。
+ 如果新憑證不符合現有私有金鑰，請選擇 **Update SSL certificate key (更新 SSL 憑證金鑰)**。
+ 如果新憑證不符合現有憑證鏈，請選擇 **Update SSL certificates (更新 SSL 憑證)**。

**SSL Certificate Key (SSL 憑證金鑰)**  
將私有金鑰檔案 (.pem 檔案) 的內容貼入方塊中。它看起來應該與下列類似：  

```
----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC0CYklJY5r4vV2NHQYEpwtsLuMMBhylMrgBShKq+HHVLYQQCL6
+wGIiRq5qXqZlRXje3GM5Jvcm6q0R71MfRIl1FuzKyqDtneZaAIEYniZibHiUnmO
/UNqpFDosw/6hY3ONk0fSBlU4ivD0Gjpf6J80jL3DJ4R23Ed0sdL4pRT3QIDAQAB
AoGBAKmMfWrNRqYVtGKgnWB6Tji9QrKQLMXjmHeGg95mppdJELiXHhpMvrHtpIyK
...
-----END RSA PRIVATE KEY-----
```

**SSL certificates of Certification Authorities (憑證授權機構的 SSL 憑證)**  
如果您有憑證鏈檔案，則請將內容複製至方塊中。  
如果您使用 Nginx，則應該將此方塊空白。如果您有憑證鏈檔案，請在 **SSL Certificate (SSL 憑證)** 中將它附加到公開金鑰憑證檔案。

![\[SSL Settings interface with options for SSL 支援, Certificate, Key, and Certification Authorities.\]](http://docs.aws.amazon.com/zh_tw/opsworks/latest/userguide/images/app_ssl_settings.png)


在您按一下 **Save (儲存)** 之後，請[重新部署應用程式](workingapps-deploying.md)以更新線上執行個體。

對於[內建應用程式伺服器層](workingcookbook-json.md#workingcookbook-json-deploy)， OpsWorks Stacks 會自動更新伺服器組態。在部署完成之後，您可以驗證 OpenSSL 安裝已運作，如下所示。

**驗證 OpenSSL 安裝**

1. 前往 **Instances (執行個體)** 頁面。

1. 按一下應用程式伺服器執行個體的 IP 地址 (或者，如果您使用負載平衡器，則為負載平衡器的 IP 地址) 來執行應用程式。

1. 將 IP 地址字首從 **http://** 變更為 **https://**，並重新整理瀏覽器來使用 SSL 驗證頁面正確載入。

已設定要在 Mozilla Firefox 中執行之應用程式的使用者，有時會得到下列憑證錯誤：`SEC_ERROR_UNKNOWN_ISSUER`。造成此錯誤的原因可能是您組織的防毒和反惡意軟體中的憑證更換功能、某些類型的網路流量監控和篩選軟體，或惡意軟體。如需如何排除此錯誤的詳細資訊，請參閱 Mozilla Firefox 支援網站上的[如何排除安全網站上的安全錯誤碼](https://support.mozilla.org/en-US/kb/error-codes-secure-websites?redirectlocale=en-US&redirectslug=troubleshoot-SEC_ERROR_UNKNOWN_ISSUER#w_monitoringfiltering-in-corporate-networks)。

針對所有其他 layer (包括自訂 layer)， OpsWorks Stacks 只會將 SSL 設定新增至應用程式的 [`deploy` 屬性](workingcookbook-json.md#workingcookbook-json-deploy)。您必須實作自訂配方，才可從節點物件擷取資訊，並適當設定伺服器。