為任何網站設置SSL是一項挑戰。網站訪客、瀏覽器和搜索引擎都會獎勵一個正確配置安全套接層(SSL)的網站。以前,這個過程涉及購買、安裝和配置一個SSL證書。但是,使用Cloudflare SSL,您只需點擊幾下就可以完成配置SSL的過程!
在本文中,您將學習如何通過Cloudflare配置您的網站以使用SSL加密。因此,請努力實現端到端加密的SSL連接!
先決條件
要按照本教程進行操作,需要滿足以下一些先決條件:
- A Cloudflare account with an existing website and domain pointed to the Cloudflare nameservers.
- 一台已安裝並配置了NGINX的Ubuntu Linux服務器。本教程示範使用Linux和NGINX,但相同的一般過程也適用於IIS或Apache。
設置Cloudflare通用SSL:只是開始的一步
有幾種方法可以使用 Cloudflare 配置 SSL。通常,最快的方法是選擇 Universal SSL。為什麼呢?使用 Universal SSL,Cloudflare 會自動提供一個證書,然後所有通過 Cloudflare 傳送的流量都將使用該證書。
啟用 Universal SSL 後,Cloudflare 將對訪問者和搜索引擎提供有效的 SSL 證書。Cloudflare 也不需要配置服務器或網站以使用該證書—非常方便!
1. 打開網絡瀏覽器,登錄到 Cloudflare 控制台。
2. 從帳戶域列表中選擇您的站點,如下所示。

3. 現在,點擊 SSL/TLS 查看站點的加密選項。

4. 選擇 Flexible 選項以啟用 Universal SSL。一旦選擇,更改將立即生效。您的站點現在在瀏覽器和 Cloudflare 之間是加密的!

配置全端到端 SSL 加密
儘管 Universal SSL 是保護站點的一個不錯的選擇,但它使服務器和 Cloudflare 之間的流量不安全。幸運的是,有兩種加密模式可以加密從 Cloudflare 到服務器的流量,即完全和完全(嚴格)加密,每種模式主要有不同的證書安裝要求。
- 完全 – 需要服務器上的證書,但這可以是自簽名證書。
- 全面(嚴格)- 安裝的伺服器端證書必須是有效的證書。
讓我們來看看這些加密方式之間的區別以及如何設置它們。
使用自簽名證書設置完整的SSL/TLS加密
與通用SSL不同,完整的SSL/TLS加密需要您的網絡伺服器正確提供一個SSL證書,以加密從伺服器到Cloudflare的流量。有很多方法可以實現這一點,但本教程展示了在具有NGINX的Linux伺服器上的步驟。
生成自簽名證書
為了加密Cloudflare與您的源伺服器之間的連接,您需要一個SSL證書。由於完整的SSL/TLS加密模式不要求證書被完全信任,因此您可以使用自簽名證書快速運行。
1. 安全外殼(SSH)進入您的Linux網絡伺服器。
2. 通過運行下面的命令更改(cd
)到標準的Ubuntu SSL目錄(/etc/ssl
)。 cd /etc/ssl

/etc/ssl
directory3. 現在,使用openssl
命令生成您網站的公鑰和私鑰。為此,運行下面的openssl
命令。
此命令完成了一些事情:
- 通過
-x509
參數請求(req
)由X.509證書提供。 - 當被NGINX引用時,使用
-nodes
參數允許NGINX在啟動時讀取證書。 - 指定證書有效的
天數
。 - 使用
-newkey
選項創建一個新的公鑰和私鑰,並使用2048位的RSA加密(rsa:2048
)。 - 將私鑰保存到
/etc/ssl/private/nginx-selfsigned.key
,使用-keyout
參數。 - 將公鑰保存到
/etc/ssl/certs/nginx-selfsigned.crt
,使用-out
參數。
如果
openssl
返回一個無害的錯誤Can't load /root/.rnd into RNG
,您需要在/etc/ssl/openssl.cnf
文件中註釋掉#RANDFILE = $ENV::HOME/.rnd
行。所有現代版本的openssl
都會回退到使用系統/dev/urandom
設備來獲取隨機熵數據,不需要特定文件來進行種子播種。
4. 成功運行該命令後,openssl將提示您提供一些信息。下面是本教程提供的所有值。
- 國家名稱:
US
- 州或省名稱:
伊利諾伊州
- 地區名稱:
布卢明顿
- 組織名稱:
Test Company, LLC
- 組織單位名稱: <空白>
- 通用名稱:
test.adamlistek.me
- 電子郵件地址:
[email protected]

5. 最後,使用 test
命令驗證證書是否存在。如果 test
命令返回 (echo $?
) 0
,則文件存在如預期。您可以在下面的截圖中看到每個命令返回了一個 0 值。

配置 NGINX
現在證書已經生成並存儲在 /etc/ssl/certs
和 /etc/ssl/private
位置,必須配置 NGINX 以應用該證書並提供站點內容。
NGINX 站點配置定義在 server
块中,通常包含在虛擬主機文件中。在下面的示例中,基本站點配置存儲在 test.adamlistek.me.conf
文件中並包含在主 nginx.conf
文件中。
1. 首先,使用您選擇的名稱創建一個新的虛擬主機文件,但對於此示例,將其命名為 test.adamlistek.me.conf
,放在 /etc/nginx/vhosts.d
目錄下。然後將下面的內容複製到虛擬主機文件中並保存。
將
test.adamlistek.me
域名替換為您自己的域名,因為這僅用於演示目的。如果/etc/nginx/vhosts.d
位置不存在,請運行mkdir /etc/nginx/vhosts.d
創建目錄。
2. 確認您的主NGINX配置檔/etc/nginx/nginx.conf
包含必要的include
行,位於http
區塊的末尾。
3. 如果您使用的是systemd,即Linux的現代系統和服務管理器,使用以下命令重新啟動NGINX。
4. 回到Cloudflare,驗證自簽名證書是否有效。要做到這一點,禁用DNS記錄下的Proxy status的“orange-cloud”選項,如下所示。禁用“orange-cloud”選項將繞過Cloudflare,直接從Web伺服器提供請求。

5. 確保網站通過網頁瀏覽器返回新創建的自簽名憑證。這樣做將導致顯示如下的警告頁面。

6. 最後,在 Cloudflare 上啟用完整的 TLS/SSL 加密。要做到這一點,重新啟用您之前禁用的 DNS 記錄上的“橙色雲”Cloudflare 代理狀態。然後,導航到 SSL/TLS 選項卡,並點擊下方顯示的 完整 单选按钮。

生成用於全(嚴格)SSL/TLS 加密的源證書
完整加密模式不能保證由 Web 服務器提供的憑證具有實際有效的憑證鏈。因此,請改為非嚴格加密,Cloudflare 將接受服務器提供的任何憑證。
Cloudflare 提供生成免費 TLS 憑證以保護您的源服務器連接的功能。但是,使用 Cloudflare 提供的源憑證有兩個缺點。一個是您需要手動生成並安裝憑證。第二個是該憑證看起來像是自簽名的憑證,任何瀏覽器都不會信任,除了 Cloudflare 之外。
使用 Origin CA 創建憑證 API 端點可以自動生成憑證,但這超出了本教程的範圍。
1. 通過進入 SSL/TLS 選項卡 —> 源服務器,如下所示,並點擊 創建憑證 按鈕。

2. 如您所見,默認選項已設置為為該域生成一個有效期為15年的萬用證書—太棒了!所以保持默認選項,並通過點擊頁面右下角的創建按鈕來生成證書。
A wildcard certificate, shown as
*.domain.com
, means that any subdomain will also be covered by this certificate including www.

3. 使用GNU nano文本編輯器首先保存私鑰和公鑰。由於有兩個密鑰需要保存,您需要一次保存一個密鑰文件。
請確保保存私鑰,因為它僅在生成原始證書時才可用。如果不慎丟失此密鑰,請撤銷證書並重新發行新的證書。
打開終端,然後運行下面的第一個命令來創建並打開公鑰文件(nginx-test.adamlistek.me.crt
)。
接下來,返回到 Cloudflare,點擊點擊複製選項,複製(Ctrl+U)您從 Cloudflare 複製的原始證書鍵(公鑰)。然後將您從 Cloudflare 複製的公鑰粘貼到 nano 中打開的公鑰文件中。保存更改(Ctrl+O)並退出(Ctrl+X)nano。
保存公鑰文件後,重複從創建密鑰文件、從 Cloudfare 複製密鑰並將其保存到密鑰文件的過程。但是這次您將創建私鑰文件(nginx-test.adamlistek.me.key
)。

4. 現在您已經創建了公鑰和私鑰,將 NGINX 指向證書的位置。通過修改 test.adamlistek.me.conf
配置文件,添加下面的行,並修改以支援您的域名。
5. 要應用新證書,請使用以下命令重新啟動 NGINX。
6. 現在返回到 Cloudflare 中的 SSL/TLS 選項卡,在下面看到的地方點擊 Full (strict) 以更新 SSL/TLS 加密模式。

啟用 LetsEncrypt 的全面 (strict) SSL/TLS 加密
使用 Cloudflare 原始證書的最大缺點是它僅限於 Cloudflare 所信任的證書。假設您需要一個完全由瀏覽器信任的證書,無論是作為後備還是進一步控制,LetsEncrypt 都提供了生成正確證書的能力。
儘管您可以使用任何有效的證書,但 LetsEncrypt 是生成有效證書的常見選擇。有多個 LetsEncrypt 客戶端可用,但本教程演示了 acme.sh 客戶端。
由於您已經在 Cloudflare 上,使用 DNS 選項進行 LetsEncrypt 的 DNS 配置是最佳方法之一。
1. 首先,打開您的終端,並通過 curl
命令安裝 acme.sh。

2. 接下來是在安裝目錄中創建或修改account.conf
文件,以添加保存的 Cloudflare API 金鑰。這些金鑰可以在 Cloudflare 控制面板的個人資料 —> API 令牌部分中找到。
儘管您可以創建一個特定權限的令牌,但在本教程中,請使用全局 API 金鑰,如下所示。
3. 通過以下命令生成證書。注意下面的命令告訴acme.sh
客戶端使用 Cloudflare(dns_cf
)來驗證(--dns
)證書的所有權。然後將等待時間(--dnsslep
)設置為在發放(--issue
)證書之前等待 20 秒,以(-d
)指定域名(test.adamlistek.me
)。
命令完成後,您將看到可以找到證書、證書密鑰、中間 CA 證書和完整鏈證書的路徑。

4. 像之前一樣,修改 NGINX 站點配置以更改ssl_certificate
和ssl_certificate_key
的位置。確保將/home/user
替換為您的acme.sh安裝位置。
5. 使用以下命令重新啟動 NGINX 以應用新的配置。
6. 最後,通過轉到SSL/TLS選項卡,然後點擊完全(嚴格),更新 Cloudflare 的 SSL/TLS 加密模式。

結論
在本教程中,您已經學會了如何使用Cloudflare提供的各種SSL/TLS選項來保護您的網站。將LetsEncrypt添加到您的Cloudflare SSL配置中還可以添加一個靈活且由用戶管理的起源證書選項!
有了各種保護與訪問者之間連接的選項的知識,您將能夠通過Cloudflare SSL實現對您的服務器的完全安全連接。