建立任何网站的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。通常,最快的方法是选择通用SSL。为什么?使用通用SSL,Cloudflare会提供一个证书,而不是您自己购买和配置SSL证书,然后所有通过Cloudflare发送的流量都将使用该证书。
启用通用SSL后,Cloudflare会向访问者和搜索引擎提供有效的SSL证书。Cloudflare也无需配置服务器或网站来使用该证书,非常方便!
1. 打开您的网络浏览器并登录Cloudflare仪表板。
2. 从帐户域列表中导航到您的站点,如下所示。

3. 现在,点击SSL/TLS以查看您站点的加密选项。

4. 选择Flexible选项以启用通用SSL。一旦选择,更改立即生效。您的站点现在在浏览器和Cloudflare之间加密!

配置完整的端到端SSL加密
虽然通用SSL是开始保护站点的好选择,但它使服务器与Cloudflare之间的流量不受保护。幸运的是,有两种加密模式可用于加密从Cloudflare到服务器的流量,分别是完全和完全(严格)加密,每种都有主要不同的证书安装要求。
- 完全 – 需要服务器上的证书,但这可以是自签名证书。
- 全(严格)- 安装的服务器端证书必须是有效的证书。
让我们来看看这些加密方法的区别以及如何设置它们。
使用自签名证书设置完整的SSL/TLS加密
与通用SSL不同,完整的SSL/TLS加密需要您的网络服务器正确地提供SSL证书,以加密从服务器到Cloudflare的流量。有许多实现这一目标的方法,但本教程演示了在带有NGINX的Linux服务器上执行的步骤。
生成自签名证书
为了加密Cloudflare与您源服务器之间的连接,您需要一个SSL证书。由于完整的SSL/TLS加密模式不要求证书被完全信任,因此您可以使用自签名证书快速运行。
1. Secure Shell (SSH) 进入您的Linux网络服务器。
2. 通过运行下面的命令,更改 (cd
) 到标准的Ubuntu SSL目录 (/etc/ssl
)。cd /etc/ssl

/etc/ssl
directory3. 现在,使用 openssl
命令生成您站点的公钥和私钥。为此,请运行下面的 openssl
命令。
这个命令完成了几件事:
- 通过
-x509
参数请求一个X.509证书。 - 当被NGINX引用时,允许NGINX使用
-nodes
参数在启动时读取证书。 - 指定证书有效的天数。
- 创建一个新的公钥和私钥,使用
-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
- 州或省名称:
伊利诺伊
- 地点名称:
布卢明顿
- 组织名称:
测试公司,有限责任公司
- 组织单位名称: <blank>
- 通用名称:
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
,是否包含位于该文件末尾的 http
块中的必要 include
行。
3. 如果您使用的是 systemd(这是 Linux 的一种现代系统和服务管理器),请使用以下命令重新启动 NGINX。
4. 返回到 Cloudflare,验证自签名证书是否正常工作。为此,请在下面显示的位置禁用 DNS 记录的 “orange-cloud” 选项。Proxy status。禁用 “orange-cloud” 选项将绕过 Cloudflare 并直接从 Web 服务器提供请求。

确保网站通过浏览器导航返回新创建的自签名证书。这样做将导致下面显示的警告页面。

最后,在Cloudflare上启用完整的TLS/SSL加密。为此,重新启用先前禁用的DNS记录上的“橙色云”Cloudflare代理状态。然后导航到SSL/TLS选项卡,单击下面显示的Full单选按钮。

生成用于全面(严格)SSL/TLS加密的起源证书
全面的加密模式不能保证Web服务器呈现的证书具有实际有效的证书链。因此,请选择非严格的加密,Cloudflare将接受服务器呈现的任何证书。
Cloudflare提供生成免费TLS证书以保护您的起源服务器连接的功能。但是使用Cloudflare提供的起源证书有两个缺点。一个是您需要手动生成和安装证书。第二个是证书看起来像是一个除Cloudflare之外任何浏览器都不信任的自签名证书。
可以使用Origin CA Create Certificate 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
)以在 nano 中进行编辑。
接下来,返回 Cloudflare 并通过点击点击复制选项复制(公钥)源证书密钥,如下所示。然后将您复制的公钥粘贴(Ctrl+U)到在 nano 中打开的公钥文件中。保存更改(Ctrl+O)并从 nano 退出(Ctrl+X)。
保存公钥文件后,从创建密钥文件、从 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 上,使用 LetsEncrypt 的 DNS 选项是进行 DNS 配置的最佳方法之一。
1. 首先,打开您的终端并通过 curl
命令安装 acme.sh。

2. 接下来是创建或修改位于安装目录中的account.conf
文件,以添加保存的Cloudflare API密钥。这些密钥可以在Cloudflare仪表板的个人资料 —> API令牌部分找到。
虽然您可以创建一个特定的权限限制令牌,但为了本教程的目的,请改用全局API密钥,如下所示。
3. 通过以下命令生成证书。注意下面的命令告诉acme.sh
客户端使用Cloudflare(dns_cf
)来验证(--dns
)证书的所有权。然后设置等待时间(--dnsslep
)为20秒,然后颁发(--issue
)证书给域(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 服务器的完全安全连接?