在CentOS服务器上用openssl speed命令测试加密算法性能,是做TLS配置、证书选型、HTTPS性能优化时最直接有效的手段。很多人装完系统直接用默认配置跑业务,结果发现SSL握手慢、CPU被加密运算拖垮,其实只需要花五分钟跑一次openssl speed,就能拿到一份精准的加密性能数据,帮你决定该用RSA还是ECDSA、该选AES-GCM还是ChaCha20、密钥长度设多少合适。下面我直接讲怎么操作、怎么看结果、怎么根据结果做选型决策。

一、openssl speed命令基础用法

CentOS 7和CentOS 8/Stream默认都自带openssl,不需要额外安装。打开终端直接输入:

openssl speed

这条命令会默认测试一大批常用算法,包括MD5、SHA1、SHA256、SHA512、DES、AES-128-CBC、AES-256-CBC、AES-128-GCM、AES-256-GCM、RSA 2048/3072/4096、DSA 2048、ECDSA P-256/P-384等。输出结果以"sign"、"verify"、"encrypt"、"decrypt"为单位,单位是每秒操作次数(ops/s)。

如果你只想测某一类算法,可以加参数。比如只测对称加密:

openssl speed -evp aes-128-gcm aes-256-gcm chacha20-poly1305

只测非对称加密和签名:

openssl speed rsa ecdsa

只测摘要算法:

openssl speed sha256 sha512

还有一个很实用的参数是"-elapsed",它会显示真实耗时而不是CPU时间,在多核环境下更能反映实际性能:

openssl speed -elapsed

二、怎么读懂测试结果

拿到输出后,重点关注三组数据。第一组是对称加密的encrypt/decrypt速度,这个直接决定TLS记录层的数据加解密吞吐量。第二组是非对称算法的sign/verify速度,这个决定TLS握手阶段的性能瓶颈。第三组是摘要算法的速度,影响证书链验证和HMAC计算。

举个典型的CentOS 7 x86_64服务器(Intel Xeon E5-2680 v4)的实测数据参考:

type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-128-cbc     118564.74k   129904.17k   132679.70k   133485.48k   133733.94k
aes-256-cbc      90598.14k    97879.59k    99644.33k   100046.00k   100142.42k
aes-128-gcm     341340.07k   381794.73k   391811.16k   394279.25k   394946.56k
aes-256-gcm     289644.63k   320869.03k   327624.87k   329381.55k   329836.20k
chacha20-poly1305 487548.25k  511879.34k   516727.47k   517362.43k   517376.34k

                  sign    verify    sign/s verify/s
rsa 2048 bits   0.000622s 0.000020s   1607.7   49267.9
rsa 3072 bits   0.001845s 0.000042s    542.0   23657.2
rsa 4096 bits   0.003950s 0.000068s    253.2   14769.4
ecdsa p256      0.0002s   0.0001s     5822.8   11540.4
ecdsa p384      0.0006s   0.0002s     1735.5    5375.4

从这组数据可以清楚看到几个关键结论:AES-GCM比AES-CBC快2-3倍,ChaCha20-Poly1305在没有AES-NI硬件加速的场景下表现最好;RSA 2048签名只有1600次/秒,而ECDSA P-256有5800次/秒,非对称运算差距巨大。

三、对称加密算法选型建议

在TLS 1.2和TLS 1.3中,对称加密套件的选择直接影响数据传输性能。根据openssl speed的测试结果,给出以下选型原则。

如果你的CPU支持AES-NI指令集(2011年之后的Intel/AMD处理器基本都支持),优先选AES-128-GCM。它在有硬件加速时速度极快,同时128位密钥在当前安全标准下完全够用,性能比AES-256-GCM高出约15-20%。

如果CPU不支持AES-NI,或者你用的是ARM架构服务器(很多云厂商的ARM实例),ChaCha20-Poly1305是最佳选择。从上面的数据看,它的速度是AES-256-GCM的1.5倍以上,而且在移动端和低功耗设备上优势更明显。

AES-CBC模式在TLS 1.3中已经被废弃,不建议使用。它不仅速度慢,还存在Padding Oracle等历史攻击风险。如果你还在维护老系统只能用TLS 1.2,至少要确保开启了加密套件的优先级配置,把GCM套件排在CBC前面。

四、非对称算法和密钥长度选型

非对称算法的性能在TLS握手中是最大的瓶颈。RSA签名运算非常慢,从测试数据看,RSA 2048每秒只能签1600次,RSA 4096更是只有250次。如果你的服务器并发连接数高,RSA 4096会直接把CPU打满。

实际选型建议:如果必须用RSA(兼容性要求),选2048位就够了。NIST和业界主流标准认为RSA 2048在2030年前都是安全的。除非有特殊合规要求,不要上4096位,性能损失太大而安全收益边际递减。

更推荐的方案是换用ECDSA。ECDSA P-256签名速度是RSA 2048的3-4倍,密钥长度只有256位,安全强度却等同于RSA 3072。在CentOS上配置Nginx或Apache时,直接指定ECDSA证书即可:

ssl_certificate     /etc/pki/tls/certs/ecdsa-p256.crt;
ssl_certificate_key /etc/pki/tls/private/ecdsa-p256.key;

生成ECDSA P-256证书的命令:

openssl ecparam -name prime256v1 -genkey -noout -out ecdsa-p256.key
openssl req -new -key ecdsa-p256.key -out ecdsa-p256.csr
openssl x509 -req -days 365 -in ecdsa-p256.csr -signkey ecdsa-p256.key -out ecdsa-p256.crt

如果追求更高安全等级,可以用ECDSA P-384,但从测试数据看它的签名速度只有P-256的三分之一,需要权衡。

五、摘要算法选型

摘要算法在TLS中主要用于证书签名验证、PRF密钥派生和HMAC计算。SHA-256是当前主流选择,速度快且安全。SHA-1已经被完全淘汰,不要在任何新配置中使用。SHA-512安全性更高但速度略慢,在性能敏感场景下SHA-256更实用。

从openssl speed的数据看,SHA-256的速度通常是SHA-512的1.5倍左右。如果你的应用对延迟极度敏感,选SHA-256;如果合规要求必须用SHA-384或SHA-512(比如某些金融行业标准),那就用,性能损失在可接受范围内。

六、针对不同场景的综合选型方案

根据服务器角色不同,给出三套经过验证的配置方案。

方案一:高并发Web服务器(Nginx/Apache)。推荐TLS 1.3,套件选TLS_AES_128_GCM_SHA256或TLS_CHACHA20_POLY1305_SHA256,证书用ECDSA P-256。这套组合握手最快、吞吐最高,适合CDN节点、API网关、负载均衡器。

方案二:兼容性优先的业务系统。TLS 1.2,套件选ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256,证书同时配RSA 2048和ECDSA P-256双证书。这样老客户端用RSA,新客户端用ECDSA,兼顾安全和兼容。

方案三:内网服务或低性能设备。如果是ARM小主机、嵌入式网关,直接上ChaCha20-Poly1305加ECDSA P-256,避免AES-NI依赖,在纯软件实现下性能最优。

七、测试时的注意事项和常见坑

第一,openssl speed测的是单线程性能。实际服务器是多核的,所以真实吞吐量要乘以核心数。但TLS握手通常是单线程处理的(除非用了异步I/O或多worker进程),所以sign/verify的单核数据更有参考价值。

第二,测试结果受CPU型号、主频、缓存大小、是否开启Turbo Boost影响很大。同一台机器不同时间测可能有5-10%波动,建议测三次取平均值。

第三,不要只看openssl speed的数字就下结论。它测的是纯算法运算速度,实际TLS性能还受网络I/O、会话缓存、OCSP Stapling等因素影响。openssl speed是选型的起点,不是终点。

第四,CentOS 8 Stream和Rocky Linux 9上的openssl版本更高(3.x),支持更多算法如SM2/SM3/SM4。如果你做国密合规,需要用openssl speed测试国密算法性能:

openssl speed sm2 sm3 sm4

国密算法在纯软件实现下速度比国际算法慢,但在有专用硬件加速卡的场景下可以达到实用水平。

八、总结

openssl speed是CentOS上最简单、最直接的加密性能测试工具,五分钟就能跑完,结果一目了然。核心选型逻辑就三句话:对称加密优先AES-128-GCM(有AES-NI)或ChaCha20-Poly1305(无AES-NI);非对称签名优先ECDSA P-256,RSA 2048够用别上4096;摘要算法用SHA-256打底。把这三点定了,再结合你的业务场景和合规要求做微调,TLS配置就不会踩坑。