Benchmarking rustls 0.23.37 vs OpenSSL 3.6.1 vs BoringSSL on x86_64

2026-03-07

System configuration

We ran the benchmarks on a bare-metal server with the following characteristics:

Versions

The benchmarking tool used for both OpenSSL and BoringSSL was openssl-bench 82b86b22.

This was built from source with its makefile.

BoringSSL

The tested version of BoringSSL is 30cd935, which was the most recent point on main when we started these measurements.

BoringSSL was built from source with CC=clang CXX=clang++ cmake -DCMAKE_BUILD_TYPE=Release.

OpenSSL

The tested version of OpenSSL is 3.6.1, which was the latest release at the time of writing.

OpenSSL was built from source with ./Configure ; make -j12.

Rustls

The tested version of rustls is 0.23.37, which was the latest stable release at the time of writing. This was used with aws-lc-rs 1.16.0 / aws-lc-sys 0.37.1.

Measurements

BoringSSL was tested with this command:

~/bench/openssl-bench
$ BENCH_MULTIPLIER=16 setarch -R make measure BORINGSSL=1

OpenSSL was tested with this command:

~/bench/openssl-bench
$ BENCH_MULTIPLIER=16 setarch -R make measure

rustls was tested with this command:

~/bench/rustls
$ BENCH_MULTIPLIER=16 setarch -R make -f admin/bench-measure.mk measure

Results

Transfer measurements are in megabytes per second. Handshake units are handshakes per second.

BoringSSL 30cd935OpenSSL 3.6.1rustls 0.23.37
transfer, 1.2, aes-128-gcm, sending8291.96610.198133.85
transfer, 1.2, aes-128-gcm, receiving6722.267129.437946.96
transfer, 1.3, aes-256-gcm, sending7564.715844.357421.02
transfer, 1.3, aes-256-gcm, receiving6217.686237.527332.91
BoringSSL 30cd935OpenSSL 3.6.1rustls 0.23.37
full handshakes, 1.2, rsa, client5657.813186.878122.99
full handshakes, 1.2, rsa, server1476.662154.412835.45
full handshakes, 1.2, ecdsa, client3545.322201.164344.30
full handshakes, 1.2, ecdsa, server9057.575226.9613,524.99
full handshakes, 1.3, rsa, client3179.482219.644766.63
full handshakes, 1.3, rsa, server1302.031712.642357.36
full handshakes, 1.3, ecdsa, client2364.81642.883160.39
full handshakes, 1.3, ecdsa, server4981.383176.586786.26
BoringSSL 30cd935OpenSSL 3.6.1rustls 0.23.37
resumed handshakes, 1.2, client45,390.321,136.963,870.34
resumed handshakes, 1.2, server44,42922,647.172,480.52
resumed handshakes, 1.3, client4648.413594.886735.88
resumed handshakes, 1.3, server5687.3237807249.08

graph of transfer speeds

graph of full handshakes

graph of resumed handshakes