CLI tool
openssl/openssl avatar
openssl/openssl

OpenSSL 4.0: The TLS and Crypto Library That Still Runs Everything

General purpose TLS and crypto library. Download ======== For Production Use Source code tarballs of the official releases can be downloaded from openssl-library.org/source/.

30,778 stars11,458 forksCApache-2.0

At a glance

What is it?
OpenSSL remains the default choice for TLS, DTLS, and QUIC, plus a standalone crypto library. The 4.0 release line adds new protocol support but keeps the same build and provider architecture that has defined the project since 3.0.
Who is it for?
Adopt OpenSSL if you need a full-strength TLS, DTLS, or QUIC implementation with a FIPS-validated module, and you can manage the complexity of its provider architecture and build system. Do not adopt it if you need a small, embeddable TLS stack with a simple API, or if you cannot commit to tracking security releases.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly C, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 14, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The Problem It Solves and Who It Serves

OpenSSL solves a concrete problem: it gives applications a single library that implements the TLS protocol stack, the DTLS variant, and the newer QUIC protocol, all on top of a general-purpose cryptographic library. The README describes it as a 'robust, commercial-grade, full-featured Open Source Toolkit', and that is not marketing fluff. It is the library that most Linux distributions, web servers, and VPN tools link against for encrypted network traffic. The target audience is broad: system administrators who need the openssl command line tool for certificate generation, developers who link libssl and libcrypto into applications, and security engineers who need a FIPS-validated module. The project does not ship binaries, so the primary consumers are either OS vendors who package it or engineers who build from source tarballs.

The Architecture: libssl, libcrypto, and the Command Line Tool

The toolkit splits into three parts. libssl handles all TLS versions up to TLSv1.3, DTLS up to DTLSv1.2, and QUIC version 1. libcrypto is the standalone cryptographic library that provides the primitives, and it can be used independently of TLS. The openssl command line tool ties them together for tasks like creating key parameters, generating X.509 certificates and CSRs, computing message digests, encrypting and decrypting data, and running SSL/TLS/DTLS client and server tests. The README also notes that the tool can run QUIC client tests, which is a recent addition. The separation matters: you can use libcrypto without ever touching TLS, and you can use the command line tool for quick tests without writing a line of code. The provider architecture, mentioned in the README-PROVIDERS.md file, is the mechanism that allows different cryptographic implementations to be loaded at runtime, which is how the FIPS module is isolated.

Getting It Running: Build, Install, and Platform Notes

The README points to INSTALL.md for detailed build instructions, and it lists platform-specific notes for UNIX-like systems, Android, Windows, DOS with DJGPP, and OpenVMS. There are also notes on Perl, Valgrind, and a dedicated migration guide for moving from OpenSSL 3.x to 3.x. For a source build, you would download a tarball from openssl-library.org/source/ (the project does not provide binaries) or clone the GitHub mirror with 'git clone https://github.com/openssl/openssl.git'. The build process typically involves running './config' and 'make', but the README does not give the exact commands, so you must read INSTALL.md. The platform notes are not optional: OpenSSL has a custom build system that requires Perl, and on Windows you need a specific toolchain. The README warns that for production use, you should prefer the precompiled shared libraries provided by your distributor or vendor, which is a practical recommendation for most users.

The 4.0 Release Line and What It Changes

The repository shows three active release lines: openssl-4.0.2, openssl-3.6.4, and openssl-3.5.8, all pushed on the same day. The 4.0 line is the newest, and the README documents QUIC version 1 support as part of the current toolkit. The presence of a master branch and a 4.0 documentation page suggests that 4.0 is the current development focus. The migration guide mentioned in the README, ossl-guide-migration(7ossl), is specifically about upgrading to 3.x from previous versions, but it does not cover 4.0. That is a gap: if you are coming from 2.x or older, you need to read the 3.x migration guide first. The release cadence appears to be multiple stable branches maintained in parallel, which is a common pattern for security-critical libraries. The 4.0 line likely includes the QUIC implementation as a stable feature, but the README does not detail the exact changes between 3.6 and 4.0.

A Genuine Limitation: Complexity and the FIPS Module

OpenSSL is not a small library, and the README does not hide that. The provider architecture, while flexible, adds a layer of configuration that can trip up new users. The FIPS module is mentioned as 'validated to conform with FIPS standards', but using it requires reading README-FIPS.md and setting up the provider correctly. A common failure mode is linking against the system OpenSSL and accidentally using the default provider instead of the FIPS one, which silently defeats the validation. Another limitation is the lack of binary distribution: the project expects you to use OS packages or build from source. For embedded systems or applications that need a tiny footprint, OpenSSL is often the wrong tool; alternatives like mbedTLS or BearSSL are designed for that. The README also notes that the main Git repository is private, with only a public mirror on GitHub, which means you cannot see the full development history unless you use the mirror.

Alternatives and How They Differ

The obvious alternative is GnuTLS, which also implements TLS and DTLS but does not have the same breadth of crypto primitives or the same command line tool. GnuTLS uses a different API and a different build system, and it does not have a FIPS-validated module in the same way. Another alternative is mbedTLS, which is designed for embedded systems with a smaller footprint and a simpler build process, but it does not support QUIC and has a narrower set of algorithms. For QUIC specifically, you could use a TLS stack that is tightly integrated with a QUIC implementation, like the one in BoringSSL, but BoringSSL is not a general-purpose library and does not provide a stable API. The key difference is that OpenSSL aims to be a full-strength general-purpose toolkit, while alternatives trade that breadth for simplicity or specialization. The README's description of the command line tool as a 'Swiss Army knife' is accurate, and no alternative matches that utility out of the box.

Maintenance, Upgrade Cost, and License Implications

The repository shows active maintenance with three release lines updated on the same day, which indicates a strong security response process. The cost of maintenance is real: you must track security advisories and upgrade regularly, and the migration between major versions (3.x to 4.0) will require code changes if you use deprecated APIs. The README points to a migration guide for 3.x, but not for 4.0, so you should check the documentation for the 4.0 line before upgrading. The license is Apache-2.0, which is permissive for commercial and non-commercial use, as the README states. That is a shift from the old OpenSSL license, which had advertising clauses. The Apache license allows you to use the library in proprietary software, but you must preserve the copyright notice and license text. The README also includes a legalities section that warns about export restrictions on cryptography, which is a reminder that you must check your jurisdiction. The project does not provide binaries, so you are responsible for building or sourcing a package, which adds to the upgrade burden.

Editorial conclusion

Adopt OpenSSL if you need a full-strength TLS, DTLS, or QUIC implementation with a FIPS-validated module, and you can manage the complexity of its provider architecture and build system. Do not adopt it if you need a small, embeddable TLS stack with a simple API, or if you cannot commit to tracking security releases. Before adopting, verify which release line (3.5, 3.6, or 4.0) matches your platform support and migration effort, and check the migration guide for changes from 3.x to 4.0. The project does not distribute binaries, so confirm that your OS vendor's package is current or plan to build from source.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community notes

Community notes