博客 | NGINX

使用 NGINX 和 NGINX Plus 进行 SSL/TLS 卸载、加密和证书

NGINX-F5-horiz-black-type-RGB 的一部分
里克·尼尔森缩略图
里克·尼尔森
2014 年 4 月 30 日发布

NGINX 和 NGINX Plus 提供了许多功能,使其能够处理大多数 SSL/TLS 要求。 它们使用 OpenSSL 和标准处理器芯片的强大功能来提供经济高效的 SSL/TLS 性能。 随着标准处理器芯片的功能不断增强,以及芯片供应商增加加密加速支持,使用标准处理器芯片相对于专用 SSL/TLS 芯片的成本优势也不断扩大。

解密 NGINX 上的 HTTPS 流量带来诸多好处

NGINX 和NGINX Plus使用 SSL/TLS 有三个主要用例。

SSL/TLS 卸载

当 NGINX 用作代理时,它可以卸载后端服务器的 SSL 解密处理。 在代理上进行解密有许多优点:

  • 改进的性能——进行 SSL 解密时最大的性能影响是初始握手。 为了提高性能,执行解密的服务器会缓存 SSL 会话 ID 并管理 TLS 会话票证。 如果在代理上完成此操作,则来自同一客户端的所有请求都可以使用缓存的值。 如果在后端服务器上完成,那么每次客户端的请求发送到不同的服务器时,客户端都必须重新进行身份验证。 使用 TLS 票证可以帮助缓解这个问题,但并非所有客户端都支持它们,而且配置和管理起来很困难。
  • 更好地利用后端服务器——SSL/TLS 处理非常耗费 CPU,并且随着密钥大小的增加而变得更加耗费 CPU。 从后端服务器移除这项工作使他们能够专注于他们最擅长的领域,即传递内容。
  • 智能路由——通过解密流量,代理可以访问请求内容,例如标头、URI 等,并可以使用这些数据来路由请求。
  • 证书管理——只需在代理服务器上购买并安装证书,而无需在所有后端服务器上安装。 这既节省时间又节省金钱。
  • 安全补丁——如果 SSL/TLS 堆栈中出现漏洞,则只需将适当的补丁应用于代理服务器。

有关更多详细信息,请参阅 NGINX Plus 管理指南中的NGINX SSL 终止

对源服务器进行 SSL/TLS 加密

有时您可能需要 NGINX 加密发送到后端服务器的流量。 这些请求可以以纯文本或加密流量的形式到达 NGINX 服务器,NGINX 必须解密才能做出路由决策。  使用与后端服务器的保持连接池可以最大限度地减少 SSL/TLS 握手的次数,从而最大限度地提高 SSL/TLS 性能。 这可以通过将 NGINX 配置为代理“https”来非常简单地实现,这样它就会自动加密尚未加密的流量。

端到端加密

由于 NGINX 可以同时执行解密和加密,因此您可以实现所有请求的端到端加密,而 NGINX 仍会做出第 7 层路由决策。 在这种情况下,客户端通过 HTTPS 与 NGINX 通信,它会解密请求,然后重新加密,然后再将其发送到后端服务器。 当代理服务器没有与后端服务器共置在数据中心时,这可能是可取的。 随着越来越多的服务器被迁移到云端,在代理和后端服务器之间使用 HTTPS 变得越来越必要。

客户端证书

NGINX 可以处理SSL/TLS 客户端证书,并可以配置为可选或必需。 客户端证书是一种将系统访问权限限制为仅限预先批准的客户端而无需密码的方式,您可以通过将吊销的证书添加到证书吊销列表(CRL) 来控制证书,NGINX 会检查该列表以确定客户端证书是否仍然有效。

附加安全功能

还有许多其他功能可帮助支持这些用例,包括(但不限于)以下内容:

  • 多证书——单个 NGINX 实例可以支持不同域的多个证书,并可以扩展以支持数十万个证书。 一个常见的用例是让 NGINX 实例服务于许多 IP 地址和域,每个域都需要自己的证书。
  • OCSP 装订- 启用此功能后,NGINX 将包含由证书颁发机构签名的带有时间戳的 OCSP 响应,客户端可以使用它来验证服务器的证书,从而避免直接联系 OCSP 服务器造成的性能损失。
  • SSL/TLS 密码– 您可以指定启用哪些密码。
  • SSL/TLS 协议– 您可以指定启用哪些协议,包括 SSLv2、SSLv3、TLSv1、TLSv1.1 和 TLSv1.2。
  • 链式证书——NGINX 支持证书链,当网站的证书不是由 CA(证书颁发机构)的根证书直接签名,而是由一系列中间证书签名时使用。 Web 服务器提供包含中间证书的“证书链”,以便 Web 客户端可以验证将网站证书链接到受信任的根证书的信任链。
  • HTTPS 服务器优化——可以通过配置工作进程数量、使用保持活动连接以及使用 SSL/TLS 会话缓存来调整 NGINX 以最大化其 SSL/TLS 性能。

欲了解更多详细信息,请查看以下资源:

示例

以下是 NGINX 安全功能的一些示例。 这些示例假设您对 NGINX 配置有基本的了解。

以下配置处理www.example.com的 HTTP 流量并将其代理到上游组:

上游后端 {
服务器 192.168.100.100:80;
服务器 192.168.100.101:80;
}

服务器 {
监听 80;
服务器名称 www.example.com;

位置 / {
代理密码 http://backends;
}
}

现在添加 HTTPS 支持,以便 NGINX 使用证书和私钥解密流量并通过 HTTP 与后端服务器通信:

上游后端 { 服务器 192.168.100.100:80; 服务器 192.168.100.101:80; } 服务器 { 监听 80; 监听 443 ssl ; # 'ssl' 参数告诉 NGINX 解密流量 服务器名称 www.example.com; ssl_certificate www.example.com.crt ; # 证书文件ssl_certificate_key www.example.com.key ; # 私钥文件 位置 / { proxy_pass http://backends; } }

或者,如果您通过 HTTP 接收流量并通过 HTTPS 将其发送到后端服务器:

上游后端 { 服务器 192.168.100.100:443; 服务器 192.168.100.101:443; } 服务器 { listen 80; 服务器名称 www.example.com; location / { proxy_pass https ://backends; # 'https' 前缀告诉 NGINX 加密流量 } }

要试用 NGINX Plus,请立即开始30 天免费试用联系我们讨论您的用例。


“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”