| 
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使用体验,尤其是您在其他操作系统上的测试结果!您可以在下方的评论区中分享您的结果。
 | 
 |