我试图使用Apache Bench(ab)在我的本地服务器上运行Apache HTTP 服务器,与安全套接字模块启用,使用TLS1.3作为通信中使用的协议,但每次我尝试使用它时,我都会遇到SSL 握手失败消息出现在我的命令行终端上。
我所做的只是安装阿帕奇2在我的本地电脑上(运行 Zorin OS 15.2),并在ssl.conf文件,我指定了SSL 协议使用:
SSLProtocol -all +TLSv1.2 +TLSv1.3
并在站点配置文件中激活 SSL 引擎、指定所有证书文件、分配服务器名称等。
完成所有这些后,我只需运行命令 ab 进行测试,如果我运行以下命令:
ab -n 100 -c 10 https://myhostname/
一切正常,但如果我尝试指定协议 TLS1.3,使用用于 TLS1.3 的一个密码,它会给出以下错误消息:
ab -n 1000 -c 50 -Z TLS_AES_256_GCM_SHA384 https://myhostname:443/
This is ApacheBench, Version 2.3 <$Revision: 1807734 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking hostname (be patient)
SSL handshake failed (1).
139632751683456:error:141A90B5:SSL routines:ssl_cipher_list_to_bytes:no ciphers available:../ssl/statem/statem_clnt.c:3786:No ciphers enabled for max supported SSL/TLS version
奇怪的是,如果我使用 TLS1.2 支持的一些密码运行相同的命令,一切都会正常工作,但如果我使用 TLS1.3 支持的任何密码,就会出现该错误。
我甚至尝试使用openssl s_client选择 -tls1_3使用 TLS1.3 作为协议连接到我的服务器,并且连接工作正常。
以下是我正在使用的软件列表:
- Apache HTTP 服务器(版本 2.4.29)
- ApacheBench(版本 2.3)
- OpenSSL(版本 1.1.1)
我想要的只是运行相同的命令,但使用协议 TLS1.3 支持的密码。
答案1
文档ab - Apache HTTP 服务器基准测试工具有:
-f
协议指定 SSL/TLS 协议(SSL2、SSL3、TLS1、TLS1.1、TLS1.2 或 ALL)。2.4.4 及更高版本支持 TLS1.1 和 TLS1.2。
这也提到了变更日志:
Apache 2.4.4 的变化
ab
:添加 TLS1.1/TLS1.2 选项以进行-f
切换,并调整输出以更准确地报告协商协议。PR 53916。[Nicolás Pernas Maradei、Kaspar Brand]
由于 TLS 1.3 没有类似的提及,因此可以假设ab
它尚不支持它(尽管 Apache 2.4 支持 TLS 1.3)。
答案2
最新版本现已支持 TLS1.3
[root@5b2407a280df /]# ab -V
This is ApacheBench, Version 2.3 <$Revision: 1903618 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
[root@5b2407a280df /]# ab -h
Usage: ab [options] [http[s]://]hostname[:port]/path
Options are:
...
-f protocol Specify SSL/TLS protocol
(SSL2, TLS1, TLS1.1, TLS1.2, TLS1.3 or ALL)
...