<img src="https://repology.org/badge/vertical-allrepos/wolfssl.svg" alt="Packaging status" align="right">
The wolfSSL embedded SSL library (formerly CyaSSL) is a lightweight SSL/TLS library written in ANSI C and targeted for embedded, RTOS, and resource-constrained environments - primarily because of its small size, speed, and feature set. It is commonly used in standard operating environments as well because of its royalty-free pricing and excellent cross platform support. wolfSSL supports industry standards up to the current TLS 1.3 and DTLS 1.2, is up to 20 times smaller than OpenSSL, and offers progressive ciphers such as ChaCha20, Curve25519, Blake2b and Post-Quantum TLS 1.3 groups. User benchmarking and feedback reports dramatically better performance when using wolfSSL over OpenSSL.
wolfSSL is powered by the wolfCrypt cryptography library. Two versions of wolfCrypt have been FIPS 140-2 validated (Certificate #2425 and certificate #3389). FIPS 140-3 validation is in progress. For additional information, visit the wolfCrypt FIPS FAQ or contact fips@wolfssl.com.
There are many reasons to choose wolfSSL as your embedded, desktop, mobile, or enterprise SSL/TLS solution. Some of the top reasons include size (typical footprint sizes range from 20-100 kB), support for the newest standards (SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3, DTLS 1.0, and DTLS 1.2), current and progressive cipher support (including stream ciphers), multi-platform, royalty free, and an OpenSSL compatibility API to ease porting into existing applications which have previously used the OpenSSL package. For a complete feature list, see Chapter 4 of the wolfSSL manual.
wolfSSL as of 3.6.6 no longer enables SSLv3 by default. wolfSSL also no longer supports static key cipher suites with PSK, RSA, or ECDH. This means if you plan to use TLS cipher suites you must enable DH (DH is on by default), or enable ECC (ECC is on by default), or you must enable static key cipher suites with one or more of the following defines:
WOLFSSL_STATIC_DH
WOLFSSL_STATIC_RSA
WOLFSSL_STATIC_PSK
Though static key cipher suites are deprecated and will be removed from future versions of TLS. They also lower your security by removing PFS.
When compiling ssl.c
, wolfSSL will now issue a compiler error if no cipher
suites are available. You can remove this error by defining
WOLFSSL_ALLOW_NO_SUITES
in the event that you desire that, i.e., you're
not using TLS cipher suites.
wolfSSL takes a different approach to certificate verification than OpenSSL does. The default policy for the client is to verify the server, this means that if you don't load CAs to verify the server you'll get a connect error, no signer error to confirm failure (-188).
If you want to mimic OpenSSL behavior of having SSL_connect
succeed even if
verifying the server fails and reducing security you can do this by calling:
wolfSSL_CTX_set_verify(ctx, WOLFSSL_VERIFY_NONE, NULL);
before calling wolfSSL_new();
. Though it's not recommended.
The enum values SHA, SHA256, SHA384, SHA512 are no longer available when
wolfSSL is built with --enable-opensslextra
(OPENSSL_EXTRA
) or with the
macro NO_OLD_SHA_NAMES
. These names get mapped to the OpenSSL API for a
single call hash function. Instead the name WC_SHA
, WC_SHA256
, WC_SHA384
and
WC_SHA512
should be used for the enum name.
Note: ** Future releases of wolfSSL will turn off TLS 1.1 by default ** Release 5.4.0 made SP math the default math implementation. To make an equivalent build as –disable-fastmath from previous versions of wolfSSL, now requires using the configure option –enable-heapmath instead.
Release 5.4.0 of wolfSSL embedded TLS has bug fixes and new features including:
Enhancements to bundled examples for an event driven server with DTLS 1.3 was added
Update for the version of VxWorks supported, adding in support for version 6.x
Support for new DPP and EAP-TEAP/EAP-FAST in wpa_supplicant
Update for TSIP version support, adding support for version 1.15 for RX65N and RX72N
Improved TSIP build to handle having the options WOLFSSL_AEAD_ONLY defined or NO_AES_CBC defined
Added support for offloading TLS1.3 operations to Renesas RX boards with TSIP
Constant time improvements due to development of new constant time tests
Initial translation of API headers to Japanese and expansion of Japanese help message support in example applications
Add support for some FPKI (Federal PKI) certificate cases, UUID, FASC-N, PIV extension for use with smart cards
Add support for parsing additional CSR attributes such as unstructured name and content type
Add support for Linux getrandom() when defining the macro WOLFSSL_GETRANDOM
Add TLS 1.2 ciphersuite ECDHE_PSK_WITH_AES_128_GCM_SHA256 from RFC 8442
Expand CAAM support with QNX to include i.MX8 boards and add AES-CTR support
Enhanced glitching protection by hardening the TLS encrypt operations
Update SP math all to not use sp_int_word when SQR_MUL_ASM is available
Fixes for constant time with div function
Fix casting warnings for Windows builds and assembly changes to support XMM6-15 being non-volatile
Fix for div_word when not using div function
Fixes for user settings with SP ASM and ED/Curve25519 small
Additional Wycheproof tests ran and fixes
Fix for SP math ECC non-blocking to always check hashLen
Fix for SP math handling edge case with submod
Return subject and issuer X509_NAME object even when not set
Renesas RA6M4 example update and fixes
Support multi-threaded use cases with Renesas SCE protected mode and TSIP
Add a global variable for heap-hint for use with TSIP
Changes to support v5.3.0 cube pack for STM32
Use the correct mutex type for embOS
ESP-IDF build cleanup and enhancements, adding in note regarding ESP-IDF Version
Support for SEGGER embOS and emNET
Fix to handle WOLFSSL_DTLS macro in Micrium build
Support for verify only and no-PSS builds updated
Add the enable options wolfssh (mapped to the existing –enable-ssh)
Remove WOLFSSL_ALT_NAMES restriction on notBefore/notAfter use in Cert struct
Move several more definitions outside the BUILDING_WOLFSSL gate with linux kernel module build
Modify --enable-openssh to not enable non-FIPS algos for FIPS builds
Remove the Python wrappers from wolfSSL source (use pip install instead of using wolfSSL with Python and our separate Python repository)
Add --enable-openldap option to configure.ac for building the OpenLDAP port
Resolve DTLS build to handle not having –enable-hrrcookie when not needed
Add an --enable-strongswan option to configure.ac for building the Strongswan port
Improve defaults for 64-bit BSDs in configure
Crypto only build can now be used openssl extra
Update ASN template build to properly handle WOLFSSL_CERT_EXT and HAVE_OID_ENCODING
Allow using 3DES and MD5 with FIPS 140-3, as they fall outside of the FIPS boundary
Add the build option --enable-dh=const which replaces setting the macro WOLFSSL_DH_CONST and now conditionally link to -lm as needed
Add the macro WOLFSSL_HOSTNAME_VERIFY_ALT_NAME_ONLY which is used to verify hostname/ip address using alternate name (SAN) only and does not use the common name
WOLFSSL_DTLS_NO_HVR_ON_RESUME macro added (off by default to favor more security). If defined, a DTLS server will not do a cookie exchange on successful client resumption: the resumption will be faster (one RTT less) and will consume less bandwidth (one ClientHello and one HelloVerifyRequest less). On the other hand, if a valid SessionID is collected, forged clientHello messages will consume resources on the server.
Misc.
Refactoring of some internal TLS functions to reduce the memory usage
Make old less secure TimingPadVerify implementation available
Add support for aligned data with clang LLVM
Remove subject/issuer email from the list of alt. Email names in the DecodedCerts struct
Zeroizing of pre-master secret buffer in TLS 1.3
Update to allow TLS 1.3 application server to send session ticket
Improve the sniffer asynchronous test case to support multiple concurrent streams
Clean up wolfSSL_clear() and add more logging
Update to not error out on bad CRL next date if using NO_VERIFY when parsing
Add an example C# PSK client
Add ESP-IDF WOLFSSL_ESP8266 setting for ESP8266 devices
Support longer sigalg list for post quantum use cases and inter-op with OQS's OpenSSL fork
Improve AES-GCM word implementation of GMULT to be constant time
Additional sanity check with Ed25519/Ed448, now defaults to assume public key is not trusted
Support PSK ciphersuites in benchmark apps
FIPS in core hash using SHA2-256 and SHA2-384
Add ability to store issuer name components when parsing a certificate
Make the critical extension flags in DecodedCert always available
Updates to the default values for basic constraint with X509’s
Support using RSA OAEP with no malloc and add additional sanity checks
Leverage async code paths to support WANT_WRITE while sending packet fragments
New azsphere example for continuous integration testing
Update RSA key generation function to handle pairwise consistency tests with static memory pools used
Resolve build time warning by passing in and checking output length with internal SetCurve function
Support DTLS bidirectional shutdown in the examples
Improve DTLS version negotiation and downgrade capability
WC_HW_WAIT_E
and sanitize leakFor additional vulnerability information visit the vulnerability page at: https://www.wolfssl.com/docs/security-vulnerabilities/
See INSTALL file for build instructions. More info can be found on-line at: https://wolfssl.com/wolfSSL/Docs.html