strongSwan 6.0.0
New Feature Additions
-
Support for multiple IKEv2 key exchanges (RFC 9370) has been added (3a850ae).
IKE_INTERMEDIATEexchanges (RFC 9242) are used to transport additional KE payloads between theIKE_SA_INITandIKE_AUTHexchanges. To rekey IKE and Child SAs with multiple key exchanges,IKE_FOLLOWUP_KEexchanges are used, as defined in RFC 9370.In proposals, additional key exchange methods are configured via
keX_prefix, whereXis a number between 1 and 7. For example,ke1_mlkem768adds ML-KEM-768 as additional KE method (works with any key exchange method, whether post-quantum or classic). As with regular key exchanges, peers have to agree on a method for each round unless no algorithms are defined by both orkeX_noneis configured to make that round explicitly optional. -
Support for the Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM, FIPS 203), a key exchange method that, at present, is believed to be secure even against adversaries who possess a quantum computer, has been added via Botan 3.6.0+ (
botanplugin), wolfSSL 5.7.4+ (wolfsslplugin), AWS-LC 1.37.0+ (opensslplugin), and the newmlplugin. The keywords for ML-KEM-512 (128 bits security strength), ML-KEM-768 (192 bits), ML-KEM-1024 (256 bits) aremlkem512,mlkem768andmlkem1024, respectively. -
AF_VSOCKsockets can be used on Linux to communicate with a daemon that runs in a VM (e.g. via theviciplugin). -
The file logger can optionally log messages as JSON objects (a2fba6d, bea1f11, see the docs for details), and can add timestamps in microseconds via the new
time_precisionsetting (#2475).
Enhancements and Optimizations
- Handling of CHILD_SA rekey collisions has been improved (d2b2e1b). This makes CHILD_SAs properly trackable via
child_rekey()hook and some corner cases are also handled correctly e.g. if a responder'sDELETEfor the new CHILD_SA arrives before itsCREATE_CHILD_SAresponse that creates that SA in the first place. Also handled properly are responders of rekeyings that incorrectly send aDELETEfor the old CHILD_SA (previously, this caused both, the new and the old SA, to get deleted). - The behavior when reloading or unloading connections that include
startin theirstart_actionhas been improved (#2324, #2418). - If no identity is configured but a certificate is available, the subject DN is used instead of the IP address (#2353).
- The
cert-enrollscript now supports three generations of CA certificates (f59ca96). - IKE ports are now considered when matching connections (9228a51, 6928709).
- The base address of in-memory IP address pools is now reported as configured (#2264).
- IKE fragment sizes can be configured for each address family explicitly (84bd011).
- The
opensslplugin can use theEVP_DigestSqueeze()API for XOFs, which was introduced with OpenSSL 3.3 (3d0f695). - The
kernel-netlinkplugin explicitly configures the direction of IPsec SAs when running on 6.10+ kernels (abdc787). - The Android app was updated for compatibility with Android 14 (740cbb2), a bug was fixed that affects importing already existing VPN profiles (9b9cf20).
Fixes
- The NetworkManager plugin (
charon-nm) now uses a different routing table than the regular IKE daemon to avoid conflicts if both are running (#2230). - TUN devices can properly handle IPv6 addresses (fccc764) and routes via them are now correctly installed on FreeBSD (bf165af).
- Reassigning a matching online lease is now preferred over an offline lease by the in-memory IP address pool to avoid conflicts with make-before-break reauthentication and multiple IKE_SAs per identity (#2472).
- To avoid conflicts with other processes when using ephemeral UDP ports, the
socket-defaultplugin now always opens IPv4 sockets before IPv6 sockets (#2494). - Challenge passwords in PKCS#10 containers are again encoded as
PrintableStringif possible to be compatible with older SCEP implementations (8e88d56). - The
viciplugin now uses the same ESP proposals (AEAD before regular) when configuringdefaultinstead of not configuringesp_proposalsat all (8e020bc). - Fixed handling of adopted reqids during IKEv1 rekeying (d02aea9, bug was introduced in 5.9.12).
- A typo in the
cert-enrollscript prevented successful signalling of a change of the sub CA certificate (957aae8).
Plugin and Configuration Changes
- The legacy
strokeplugin is no longer enabled by default and must be enabled explicitly. - The
opensslplugin is now enabled by default, while the following crypto plugins are no longer enabled by default:aes,curve25519,des,fips-prf,gmp,hmac,md5,pkcs12,rc2,sha1,sha2. - The following deprecated plugins have been removed:
bliss(signature scheme),newhope(key exchange method),ntru(key exchange method). charon.make_before_breakis now enabled by default, which initiates IKEv2 reauthentication with a make-before-break instead of a break-before-make scheme. Make-before-break creates overlapping IKE and Child SA during reauthentication by first recreating all SAs before deleting the old ones. This behavior can be beneficial to avoid connectivity gaps during reauthentication (unlike rekeying still not completely without interruption), but requires support for overlapping SAs by the peer. strongSwan can handle such overlapping SAs since version 5.3.0.
For Developers
- Using the
child_rekey()hook now allows tracking CHILD_SAs correctly in case of rekey collisions. The event is generally only triggered once after installing the outbound SA for the new/winning CHILD_SA. However, in some cases the event is triggered twice, but it is now ensured that listeners can properly transition to the winning SA. - Refer to the documentation of
key_exchange_method_tinterface to learn how KEMs can be implemented in plugins. - The format of key exchange test vectors has been changed so they can be used for KEMs and classic DH methods (4067678).
- The NetworkManager frontend's build files have been updated to not rely on
gnome-common. It now also usesgettextdirectly instead ofintltool(5019e3e). - Performance of running tests in the testing environment has been improved.
Refer to the 6.0.0 milestone for a list of all closed issues and pull requests.