Get listed

Cryptography

Best TLS Libraries in 2026: 6 Secure Transport Options

Print the library on a host you own before you debate a fork. Containers can report OpenSSL while /opt still hides a copy.

Expertise: Cryptography · Level: Intermediate · 6 min read

Containers report OpenSSL. /opt still has 1 copy the CVE scanner never saw. The inventory the team already trusts is the image SBOM. The SBOM listed the distro package.

That list is false confidence if the binary you actually link is a vendored fork sitting next to the distro copy. Print the library on a host you own before you debate BoringSSL versus a system OpenSSL.

Inventory. Link. Patch. Lie at the first step and the rest is theatre. The TLS library you compile and ship is what attackers hit, not the name in a Dockerfile comment.

System OpenSSL, BoringSSL-shaped stacks, and language runtimes that bundle their own TLS split the choice. Pick the copy you can actually patch on the host you operate.

How we evaluated

We read first-party docs, source, licenses, and release notes, and we treat a marketing page as a claim, not as proof that two products do the same work.

We cared about whether the library is what you actually link, whether the license is one you can ship, whether 1.3 is the current floor in the docs, and whether the project still publishes advisories.

We read first-party docs, licenses, and release notes. Unless a write-up says otherwise, we did not run a paid tenant.

ToolBest forWhat to check
OpenSSLThe library most images already linkTLS 1.3 ยท Apache-2.0 on 3.x ยท most images already link it
BoringSSLGoogle’s OpenSSL forkGoogle fork ยท see repo license ยท you vendor it
rustlsTLS in Rust without OpenSSLPure Rust ยท Apache-2.0 / MIT / ISC ยท no OpenSSL link
Go crypto/tlsStdlib TLS in GoStandard library ยท BSD-3-Clause ยท you set MinVersion
LibreSSLOpenBSD fork of OpenSSLOpenBSD fork ยท see project license ยท you choose the port
wolfSSLEmbedded TLS with a commercial pathSmall footprint ยท GPL-3.0 / commercial ยท embedded and FIPS path
How the tools differ
Forks you choose
Default link
Rust / embedded
Stdlib
1

OpenSSL

Best for the library most images already link

OpenSSL

OpenSSL 3.x is Apache-2.0. It is still what a lot of distros ship. Config and version pin are the job.

Start by naming the version you actually link. Then talk about switching. 1.1.1 is not a current floor. Distro patches lag. Config errors are still yours.

Key features

  • TLS 1.3
  • FIPS stories on the public docs
  • Everywhere
  • Apache-2.0 on 3.x

Why we like it

The library you already link is the library you should pin first. Pin it before you debate a fork.

Limits

1.1.1 is not a current floor. Distro patches lag. Config errors are still yours.

2

BoringSSL

Best for google’s OpenSSL fork

BoringSSL

BoringSSL is Google’s fork. Chrome and some Google services use it. The API is not a stable OpenSSL promise.

If you already vendor BoringSSL, do not pretend it is stock OpenSSL. You own the upgrade. Unstable API is the catch.

Key features

  • Used at Google scale
  • Aggressive removal of dead protocol
  • You vendor it
  • Not a distro default

Why we like it

Naming the fork you already vendor names the fork you already vendor.

Limits

Unstable API. Not a drop-in for every OpenSSL consumer. You own the upgrade.

3

rustls

Best for TLS in Rust without OpenSSL

rustls

rustls is a TLS library in Rust. It does not link OpenSSL. Memory safety is the pitch. The repo is the prove-it.

For new Rust services you can name the crate in the lockfile. Not every C ecosystem can switch. Some enterprise auditors still ask for OpenSSL FIPS.

Key features

  • Pure Rust
  • TLS 1.3
  • Dual license
  • Growing ecosystem

Why we like it

A crate you can name in the lockfile is the Rust pin you can name in the lockfile.

Limits

Not every C ecosystem can switch. Some auditors still ask for OpenSSL FIPS.

4

Go crypto/tls

Best for stdlib TLS in Go

Go crypto/tls

Go’s crypto/tls is the standard library. Most Go services already use it. Config is MinVersion and cipher policy.

If the service is Go, start here. Do not add OpenSSL without a reason. You still set a floor. An old MinVersion is a footgun. It is not a WAF.

Key features

  • Stdlib
  • TLS 1.3
  • No extra link
  • You set MinVersion

Why we like it

The TLS you already imported is the right default for a Go service.

Limits

You still set a floor. An old MinVersion is a footgun. Not a WAF.

5

LibreSSL

Best for OpenBSD fork of OpenSSL

LibreSSL

LibreSSL is the OpenBSD fork. Smaller surface is the pitch. Some BSDs and a few Linux ports use it.

If the host is OpenBSD, this is the library you already have. Linux support is a port, not a promise. It is not the rustls story.

Key features

  • Fork focused on cleanup
  • OpenBSD default story
  • Compatible-ish APIs
  • You choose the port

Why we like it

The library on the BSD you already run is the practical fork row.

Limits

Linux support is a port, not a promise. Not the Rust stack.

6

wolfSSL

Best for embedded TLS with a commercial path

wolfSSL

wolfSSL targets embedded and FIPS shops. GPL or a commercial license.

When the device cannot take OpenSSL’s size, this is the commercial-friendly embedded row. GPL in the device has a share story. Paid license is sales. If the device is a plant, open OT monitoring.

Key features

  • Small footprint story
  • FIPS options they sell
  • Lots of hardware hooks
  • GPL or paid

Why we like it

A stack sized for the device is the pick when the general-purpose library will not fit.

Limits

GPL in the device has a share story. Paid license is sales. If the device is a plant, open OT monitoring.

What we left out

  • s2n-tls. AWS shops want the library Amazon opened. OpenSSL and BoringSSL already cover the C stacks most images link, and a third C library would blur the split.
  • Mbed TLS. Embedded teams already vendor a small TLS stack. WolfSSL already covers the constrained commercial-friendly option on this page.

rustls threads now talk about a compat shim, not a poster. Name the library you actually link.

Questions before you buy

If procurement cannot get written answers, you are still buying a brochure.

  1. What does the binary we ship actually link, and which version is that?
  2. Do we vendor this library, or did the distro or language pick it for us?
  3. Is there a FIPS or size constraint that rules out the default, and is that written down?

Print the library. Pin it. Do not invent a cipher.

FAQs

Is this a VPN list?

No. Network owns the path. TLS is the library the service links.

Does TLS 1.3 on a poster mean I am done?

No. Name the library and the MinVersion you ship.

Should I roll my own TLS?

No. Empty was never a license to invent a handshake.

Is this a scored bake-off?

No. Order is editorial.

Cryptography resources