TA的每日心情 | 无聊 2023-5-27 01:12 |
---|
签到天数: 101 天 [LV.6]常住居民II
|
TLS(传输层安全协议)是一种极为受欢迎的加密协议。在内核()中施TLS(即TLS)可显著降低在用户空间与内核之间复制操作的需求,从而提高NGINX的性能。更要紧的是,把[url=http:///www.nginx-cn.net/?p=20422]使用nginx进行微缓存的好处[/url]分析透彻,让其社会功能发挥到极致才是我们当务之急要做的。NGINX 已成为 F5, Inc 的一员,而 F5, Inc 则是当前全球热门的开源项目 NGINX 背后的公司。[align=center]https://www.nginx-cn.net/wp-content/uploads/2023/06/tutorial-deploy-configure-microservices_code-review-768x425-02.png[/align]
通过结合使用TLS和(),数据可以直接在内核空间加密,然后再传递到络堆栈进行传输。这使得我们不再需要将数据复制到用户空间、利用TLS库进行加密、再返回内核空间进行传输的这一过程。TLS还可以将TLS的处理过程卸载到硬件,包括将TLS对称加密处理任务卸载到络设备。
现代L和FBSD内核支持将TLS卸载到内核,而NGINX开源版现在也同样能做到!NGINX1214在使用SSL_()传输静态文件时引入了TLS支持,可以极大地改善性能。如下所述,内核和OSSL只有采用TLS构建,才能让NGINX使用SSL_()。
本文详细介绍了支持TLS的操作系统以及OSSL版本,并展示了如何针对TLS构建和配置内核与NGINX。为了向您展示TLS的性能改善效果,我们还将分享在FBSD和U上进行测试的具体说明和结果数据。
注:TLS的施这一新兴事物正在迅速发展中。本文描述了截至2022年11月NGINX对TLS的支持情况,但本文提供的信息和说明可能会在之后进行更新,请随时关注和NGINX博客上的公告。
通用要求
操作系统——以下任一一个:
FBSD?130+。截至2022年11月,FBSD130+是仅有一个在NGINX中支持TLS的操作系统,且需手动构建NGINX即可整合OSSL?300+。请参阅在FBSD上启用支持TLS的NGINX。
可以使用在L内核版本417或更高版本上构建的L发行版,但我们建议尽可能使用在版本52或更高版本上构建的发行版。(际上,版本413便提供了TLS支持,但OSSL300需要内核头版本417或更高版本。)
OSSL——版本300或更高版本
NGINX——版本1214或更高版本(主线版)
操作系统支持
支持TLS的操作系统
截至2022年11月,在NGINX开源版支持的所有操作系统中,以下操作系统支持TLS和指定的密码。有关密码支持的详细信息,请参阅TLS协议和密码支持。
TLS12密码
TLS13密码套件
TLS_CHACHA20_POLY1305_SHA256密码
L内核版本
AL2*
?
?
?
510
COS8**
?
?
?
418
FBSD130
?
?
??***
NA
RHEL8
?
?
?
418
SLES15SP2
?
?
?
53
U2022LTS
?
???
?
54
U2104
?
?
?
511
U2110
?
?
?
513
??*内核版本必须是510(不能是414);请参阅不支持TLS的操作系统和AL2常见问题解答
?**继承了上游源RHEL8的TLS支持特性
***请参阅FBSD操作日志
不支持TLS的操作系统
以下操作系统不支持KTLS,原因如下:
AL311–314——内核使用CONFIG_TLS=选项构建,该选项禁止将TLS构建为模块或内核的一部分。
AL2——默认AL2AMI(请参阅AL2常见问题解答)的L内核版本是414。
COS74+——L内核版本为310。继承了上游源RHEL74+的TLS支持特性。
D10和11——内核使用CONFIG_TLS=选项构建(请参阅D漏洞报告日志)。
RHEL74+——L内核版本是310。
SLES?12SP5+——L内核版本是412。
U?1804LTS——L内核版本是415。
TLS协议和密码支持
如上所述,支持TLS的操作系统对TLS协议和密码的支持各不相同。
对于TLSV12,KTLS模块支持以下密码:
AES128-GCM-SHA256
AES256-GCM-SHA384
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES256-GCM-SHA384
对于TLS13,TLS模块支持以下密码套件:
TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256(仅部分操作系统,如支持TLS的操作系统部分所述)
如要验证NGINX二进制文件中启用了哪些OSSL支持的TLS密码,请运行构建NGINX的目录(例如主目录)中的-300命令。
启用NGINX中的TLS
我们在文首的介绍中说过,TLS可提高NGINX的性能,因为所有加密和解密操作都在内核中进行。数据可以直接在内核空间加密,然后传递到络堆栈进行传输,消除了将数据复制到用户空间、使用TLS库对其加密、再返回内核空间进行传输的这一过程的必要性。
加载内核中的TLS
在现代FBSD和L发行版中,TLS通常被构建为一个模块(使用CONFIG_TLS=选项)。在启动NGINX之前,必须将TLS模块显式加载到内核。
在FBSD上,以用户身份运行以下命令:
#
#=1
有关FBSD命令选项的详细信息,请参阅(4)的手册页。
在L发行版上,以用户身份运行以下命令:
#
在FBSD上启用支持TLS的NGINX
如要在FBSD上启用NGINX的TLS支持,您可以使用与L发行版相同的操作说明。但我们建议您执行以下步骤,以便在FBSD端口集合的-树中使用支持TLS的NGINX。有关更多信息(包括TLS概述),请参阅FBSD上的将TLS卸载到内核。
构建支持TLS的OSSL30,在配置菜单中选择适当的选项:
#-
修改,将-用作SSL库:
#"DEFAULT_VERSIONS+==-
构建NGINX:
#-
在L发行版上构建支持TLS的NGINX
大多数当前的L发行版都包含早于300(通常是版本11)的OSSL版本。因此,您需要使用OSSL300从源代码构建NGINX。
命令中启用TLS支持的两个关键选项是:
---=-300
----=-
另一个选项面向NGINX官方二进制包(请见)中的模块。您还可以指定一组自定义模块。如要查看当前NGINX二进制文件的构建选项,请运行-V。
如要使用OSSL300构建NGINX,请运行以下命令:
$-1214
$-300
$-300
$-1214
$\
---\
--=\
---=\
----=\
----=\
---=\
---=\
------=_\
-----=_\
-----=_\
-----=_\
-----=_\
--=\
--=\
---\
----\
---\
---__\
---___\
---__\
---__\
---__\
---___\
---_4_\
---___\
---__\
---___\
---__\
---__\
---___\
---__\
---_2_\
---\
---__\
---\
---__\
---__\
---___\
---=-300\
----=-\
----='--O2----W-W=--W,-D_FORTIFY_SOURCE=2-PIC'\
---='-W,-B--W,-,-W,-,-W,----'
$–4
$
注:生成的NGINX二进制文件静态链接到OSSL300库。如果日后需要修补OSSL,您必须下载并解压新的OSSL源文件,然后运行上述命令重建NGINX二进制文件。
配置NGINX
如要启用TLS,在{}中的__指令中添加OKTLS参数,如我们的测试中使用的示例配置:
_;
_;
{}
{
;
{
443;
_;
__;
__OKTLS;
_TLS13;
{
;
}
}
}
验证TLS是否已启用
如要验证NGINX是否正在使用TLS,请开启调试模式,并在错误日志中检查BIO___()和SSL_()。
$BIO
2022111016:02:46[]274550#274550:*2BIO___():1
2022111016:02:49[]274550#274550:*3BIO___():1
$SSL_
2022111016:02:46[]274550#274550:*2SSL_:1048576
2022111016:02:49[]274550#274550:*3SSL_:1048576
注:我们建议您在进行这些检查后关闭调试模式(尤其是在生产环境中)。由于存在大量的写入操作,调试日志会导致性能下降;此外,调试日志可能很大,很就会耗尽磁盘分区上的可用空间。
借助TLS提高性能
当在高负载下提供静态文件时,与用户空间TLS相比,SSL_()可将吞吐量提高比较多2倍,但性能提升的幅度在很大程度上取决于多种因素(磁盘性能、系统负载等)。如果您的卡支持TLS卸载,它还可以减少CPU使用率。
测试性能
如要测量您的设置的性能提升情况,可以依循以下说明来运行简单的单线程测试。如下所述,我们的测试结果表明,需进行任何特定调整,TLS即可将性能提升近30%。
使用的硬件和软件:
AWS3例采用了:
4GBRAM
20GB通用SSD
英特尔?至强?白金8259CLCPU,250GH双核处理器
?FBSD130和U2110
TLS13,采用TLS_AES_256_GCM_SHA384密码套件
NGINX1214,根据启用NGINX中的TLS部分的要求构建和配置。
执行测试的方法:
创建一个完全适合磁盘缓存的大文件:
#-11G
运行以下命令检查吞吐量;多次重复执行基本命令以获得更准确的结果。将输出结果输出到用程序[FBSD][U],进行基本的统计分析。
#'1100';----'%{_}\'1G|
性能测试结果
以下是我们的测试结果,以,的输出结果表示,每个值都是下载速度,单位是B秒。
不支持TLS的FBSD130的吞吐量:
NMMMAS
10532225573348555616555155610239137
支持TLS的FBSD130的吞吐量:
NMMMAS
10629379723164717349708600428304766
支持TLS的U2110的吞吐量:
NMMMAS
10529199705720662354654321648025103
支持TLS的U2110的吞吐量:
NMMMAS
10619105760208756278741848343255246
在我们的测试中,与U相比,FBSD上的TLS提升的性能更高。性能改进比例如下:
比较小值
比较大值
中位数
平均数
FBSD130
18%
26%
29%
28%
U2110
16%
8%
14%
13%
结语
NGINX1214在使用SSL_()提供静态文件时引入了TLS支持。我们的测试表明,NGINX性能可提高8%到29%,具体因操作系统而异。
我们很想知道您的TLS和NGINX使用体验,尤其是您在其他操作系统上的测试结果!您可以在下方的评论区中分享您的结果。 |
|