Commit Graph
100 Commits
Author SHA1 Message Date
Tobias Brunner 564a199674 kernel-netlink: Add support for AES-CMAC-96 (RFC 4494)
The kernel apparently supports this since 3.10.
2016-12-12 11:43:06 +01:00
Tobias Brunner 8c859e86d6 android: New release after re-adding support for ECC Brainpool curves 2016-12-10 12:28:09 +01:00
Tobias Brunner f20b3f7b2c openssl: BoringSSL doesn't provide curve data for ECC Brainpool curves 2016-12-10 12:27:47 +01:00
Tobias Brunner aae9a9e678 android: New release after fixing libtpmtss issue 2016-12-09 11:18:17 +01:00
Tobias Brunner 9920824e70 android: Make sure libtpmtss is loaded on older systems
On newer Android systems this seems to happen automatically (or does at
least not cause crashes if the library is not loaded).
2016-12-09 11:16:42 +01:00
Tobias Brunner 708f9c7f65 android: New release after adding notification 2016-12-08 17:37:21 +01:00
Tobias Brunner 7e1c840753 Merge branch 'android-updates'
Adds a permanent notification while connected (or connecting), which
allows running as a foreground service, which in turn should prevent
Android from terminating the service when low on memory.

Also adds support for ChaCha20/Poly1305 AEAD and Curve25519 DH.
2016-12-08 17:33:11 +01:00
Tobias Brunner 3e85b5a492 android: Ensure that the certificates are loaded when accessing them via JNI 2016-12-08 17:14:49 +01:00
Tobias Brunner 85059424a7 android: Add a public notification 2016-12-08 17:14:49 +01:00
Tobias Brunner d5070425a0 android: Display a permanent notification while connected
This forces the service to run in the foreground, meaning the system
won't kill it when low on memory.
2016-12-08 17:14:49 +01:00
Tobias Brunner e03c936982 android: Log any installed DNS servers 2016-12-08 17:14:49 +01:00
Tobias Brunner d6d12bab14 android: Unregister listener in case of error alerts
This avoids triggering additional errors via e.g. ike_updown() that
might cause the error message displayed in the GUI to change if the
status fragment is recreated.

References #2134.
2016-12-08 17:13:16 +01:00
Tobias Brunner ef2ad9db1c android: Report an error for invalid integer values
Previously we'd just ignore the invalid values without notifying the
user.
2016-12-08 16:43:51 +01:00
Tobias Brunner cefbf2bf9b android: Propose curve25519 in the ESP proposals 2016-12-08 16:43:51 +01:00
Tobias Brunner fec47b6146 android: Enable curve25519 plugin in the app 2016-12-08 16:43:51 +01:00
Tobias Brunner b077a2a71a android: Optionally build the curve25519 plugin 2016-12-08 16:43:51 +01:00
Tobias Brunner 5f0913fc1e android: Propose ChaCha20/Poly1305 in the ESP AEAD proposals 2016-12-08 16:43:50 +01:00
Tobias Brunner 8c0b38e9df android: Enable chapoly plugin in the app 2016-12-08 16:43:50 +01:00
Tobias Brunner 4d47adb639 android: Optionally build the chapoly plugin 2016-12-08 16:43:50 +01:00
Tobias Brunner 03472aea1f android: Update Gradle plugin and wrapper 2016-12-08 16:43:50 +01:00
Tobias Brunner 8fe2cefd9d travis: The xcode7.3 image is now the default 2016-12-02 16:56:13 +01:00
Tobias Brunner c7c9a50adb travis: Output config.log on failure 2016-12-02 16:56:13 +01:00
Tobias Brunner 016228c158 configure: Check for actual functions in libraries with AC_CHECK_LIB
Checking for `main` produces code like this in the test program:

  int
  main ()
  {
  return main ();
    ;
    return 0;
  }

This recursive call results in a warning message with some compilers (e.g.
Clang in newer Xcode versions: "all paths through this function will call
itself [-Winfinite-recursion]"), which lets the tests fail when compiling
with -Werror.
2016-12-02 16:56:13 +01:00
Tobias Brunner 5078f87a52 plugin-loader: Strip '!' from critical plugin names when setting paths 2016-11-18 12:21:49 +01:00
Tobias Brunner 549b325d9d proposal: Add curve25519 and curve448 to default proposal 2016-11-14 16:20:51 +01:00
Tobias Brunner 9d170c18bc configure: Enable curve25519 plugin by default 2016-11-14 16:20:51 +01:00
Tobias Brunner ee5da1633a bus: Re-add ampersand that got lost in refactoring
Fixes: 4af02c6c61 ("bus: Fix maximum log level for different groups
after removal of a logger")
2016-11-14 15:15:11 +01:00
Tobias Brunner da1d5cd2e6 peer-cfg: Fix memory leak when replacing child configs
Fixes: 622c2b2c33 ("peer-cfg: Add method to atomically replace child
configs")
2016-11-11 15:34:33 +01:00
Tobias Brunner 4af02c6c61 bus: Fix maximum log level for different groups after removal of a logger
The log level was incorrectly set to the same value for all groups.

Fixes: dac15e03c8 ("bus: Fix maximum log levels when mixing log/vlog
implementing loggers")
2016-11-11 15:33:44 +01:00
Tobias Brunner 07bbd2f642 nm: Enable IKE fragmentation 2016-10-20 08:03:26 +02:00
Tobias Brunner ede17556ad configure: Reorder mgf1 in list of crypto plugins 2016-10-18 11:44:30 +02:00
Tobias Brunner 8564535c23 newhope: Fix Doxygen group name 2016-10-14 18:41:25 +02:00
Tobias Brunner ad71db18f1 libnttfft: Fix Doxygen group 2016-10-14 18:37:14 +02:00
Tobias Brunner 955ce91652 Fixed some typos, courtesy of codespell 2016-10-14 18:09:09 +02:00
Tobias Brunner d3beae1311 newhope: Properly release allocated arrays if RNG can't be created 2016-10-14 15:24:04 +02:00
Tobias Brunner b9c4b15a53 nm: Add D-Bus policy to the distribution 2016-10-14 14:11:23 +02:00
Tobias Brunner 542b464e25 nm: Version bump to 1.4.1 2016-10-14 09:52:11 +02:00
Tobias Brunner 9ba6548766 mem-cred: Support storing a delta CRL together with its base
So far every "newer" CRL (higher serial or by date) replaced an existing
"older" CRL.  This meant that delta CRLs replaced an existing base CRL
and that base CRLs weren't added if a delta CRL was already stored.  So
the base had to be re-fetched every time after a delta CRL was added.

With this change one delta CRL to the latest base may be stored.  A newer
delta CRL will replace an existing delta CRL (but not its base, older
base CRLs are removed, though).  And a newer base will replace the existing
base and optional delta CRL.
2016-10-11 17:18:22 +02:00
Tobias Brunner cee01fc9bf revocation: Cache valid CRL also if certificate is revoked 2016-10-11 17:18:22 +02:00
Tobias Brunner 790847d17c pki: Don't remove zero bytes in CRL serials anymore
This was added a few years ago because pki --signcrl once encoded serials
incorrectly as eight byte blobs.  But still ensure we have can handle
overflows in case the serial is encoded incorrectly without zero-prefix.
2016-10-11 17:18:22 +02:00
Tobias Brunner 49d9266c31 pki: Use serial of base CRL for delta CRLs
According to RFC 5280 delta CRLs and complete CRLs MUST share one
numbering sequence.
2016-10-11 17:18:22 +02:00
Tobias Brunner c72c6e9225 openssl: Fix AES-GCM with BoringSSL
BoringSSL only supports a limited list of (hard-coded) algorithms via
EVP_get_cipherbyname(), which does not include AES-GCM.  While BoringSSL
deprecated these functions they are also supported by OpenSSL (in BoringSSL
a completely new interface for AEADs was added, which OpenSSL currently does
not support).
2016-10-11 15:29:14 +02:00
Tobias Brunner 8b35d5f162 android: Identifiers for SHA2-base RSA signature schemes got renamed
Fixes: 40f2589abf ("gmp: Support of SHA-3 RSA signatures")
2016-10-11 15:29:14 +02:00
Tobias Brunner befe6e6c7e android: MGF1 implementation was moved to a plugin
Fixes: 188b190a70 ("mgf1: Refactored MGF1 as an XOF")
2016-10-11 15:29:14 +02:00
Tobias Brunner bd815325a6 libimcv: Add Debian 8.6 to database 2016-10-05 16:01:20 +02:00
Tobias Brunner 0ddda7ca56 task-manager: Only trigger retransmit cleared alert if there was at least one retransmit
The counter is already increased when sending the original message.

Fixes: bd71ba0ffb ("task-manager: Add retransmit cleared alert")
2016-10-05 16:01:14 +02:00
Tobias Brunner 26df5e9aa4 Merge branch 'proposal-checks'
Adds checks for proposals parsed from strings.  For instance, the presence
of DH, PRF and encryption algorithms for IKE are now enforced and AEAD and
regular encryption algorithms are not allowed in the same proposal anymore.
Also fixed is the mapping of the aes*gmac keywords to an integrity algorithm
in AH proposals.
2016-10-05 14:59:31 +02:00
Tobias Brunner 89054d9dcb unit-tests: Enable optional logging in libcharon unit tests 2016-10-05 14:27:05 +02:00
Tobias Brunner 9e5065d877 unit-tests: Add more tests for proposal creation 2016-10-05 14:27:05 +02:00
Tobias Brunner a65a282fd1 proposal: Correctly add AES-GMAC for AH proposals
We parse aes*gmac as encryption algorithm, which we have to map to an
integrity algorithm.  We also make sure we remove all other encryption
algorithms and ensure there is an integrity algorithm.
2016-10-05 14:27:05 +02:00
Tobias Brunner 6a5e6579ea proposal: Enforce separate proposals for AEAD and classic encryption algorithms 2016-10-05 14:27:04 +02:00
Tobias Brunner e98414ea9c proposal: Make sure there is a PRF defined in IKE proposals
But filter PRFs from ESP proposals.
2016-10-05 14:27:04 +02:00
Tobias Brunner 9b191d5975 proposal: Make DH groups mandatory in IKE proposals parsed from strings
References #2051.
2016-10-05 14:26:55 +02:00
Tobias Brunner fcca7d2904 ikev2: Respond with NO_PROPOSAL_CHOSEN if proposal without DH group was selected
Fixes #2051.
2016-10-05 14:26:50 +02:00
Tobias Brunner 597e057b9e testing: Remove ikev2/default-keys scenario
No default keys are generated anymore.
2016-10-05 12:25:29 +02:00
Tobias Brunner bfc595a36a kernel-netlink: Consider RTA_SRC when looking for a source address 2016-10-05 11:44:53 +02:00
Tobias Brunner 1bfa3f2a10 Merge branch 'priv-key-any'
Adds the ability to parse KEY_ANY keys via the pkcs1 and openssl plugins.
This is then used in the pki utility, where private keys may now be
loaded via `priv` keyword instead of having to specify the type of the key
explicitly.  And swanctl can load any type of key from the swanctl/private
directory.
2016-10-05 11:36:11 +02:00
Tobias Brunner 7caba2eb55 swanctl: Add 'private' directory/section to load any type of private key 2016-10-05 11:33:36 +02:00
Tobias Brunner 05ccde0a8b pki: Add generic 'priv' key type that loads any type of private key 2016-10-05 11:32:52 +02:00
Tobias Brunner 4a6f97d00b openssl: Add a generic private key loader 2016-10-05 11:32:52 +02:00
Tobias Brunner 437610ace5 pkcs1: Support building of KEY_ANY private keys
We try to detect the type of key by parsing the basic structure of the
passed ASN.1 blob.
2016-10-05 11:32:52 +02:00
Tobias Brunner 1798e490da pki: Drop -priv suffix to specify private key types 2016-10-05 11:32:52 +02:00
Tobias Brunner 33241871a8 ikev2: Only add NAT-D notifies to DPDs as initiator
If a responder is natted it will usually be a static NAT (unless it's a
mediated connection) in which case adding these notifies makes not much
sense (if the initiator's NAT mapping had changed the responder wouldn't
be able to reach it anyway).  It's also problematic as some clients refuse
to respond to DPDs if they contain such notifies.

Fixes #2126.
2016-10-04 12:16:05 +02:00
Tobias Brunner 97c74b565b nm: Make global CA directory configurable 2016-10-04 10:27:35 +02:00
Tobias Brunner 3713d3024f Merge branch 'ikev1-rekey-deletion'
Sends a DELETE when rekeyed IKE_SAs are deleted. This fixes issues with
peers (e.g. Cisco) that continue to send DPDs on the old SA and then
delete all SAs if no response is received.  But since the DELETE could get
dropped this might not fix the issue in all cases.

Also, when terminating an IKE_SA DELETES for all CHILD_SAs are now sent
before sending one for the IKE_SA and destroying it.

Fixes #2090.
2016-10-04 10:25:01 +02:00
Tobias Brunner b56b850251 ikev1: Activate task to delete the IKE_SA in state IKE_REKEYING
It does not have any CHILD_SAs attached at that point.
2016-10-04 10:14:43 +02:00
Tobias Brunner 2e06179f7f ikev1: Delete Quick Mode SAs before the ISAKMP SA
After the ISAKMP_DELETE task has been executed the IKE_SA is destroyed
so we wouldn't be able to send deletes for the Quick Mode SAs.
2016-10-04 10:14:43 +02:00
Tobias Brunner ebc6445de8 ikev1: Send DELETE for rekeyed IKE_SAs
If we silently delete the IKE_SA the other peer might still use it even
if only to send DPDs.  If we don't answer to DPDs that might result in the
deletion of the new IKE_SA too.
2016-10-04 10:14:43 +02:00
Tobias Brunner 9691e537cd starter: Install an empty ipsec.secrets file 2016-10-04 10:13:32 +02:00
Tobias Brunner 120729f3f4 starter: Don't generate a key/certificate if ipsec.secrets does not exist 2016-10-04 10:13:32 +02:00
Tobias Brunner b27663399b watcher: Avoid allocations due to enumerators
Since the FD set could get rebuilt quite often this change avoids having
to allocate memory just to enumerate the registered FDs.
2016-10-04 10:12:18 +02:00
Tobias Brunner dcee481910 Merge branch 'enable-fragmentation'
This enables IKE fragmentation by default. And also increases the
default fragment size to 1280 bytes (the default for IPv6).
2016-10-04 10:09:03 +02:00
Tobias Brunner d5c6a0bac4 vici: Enable IKE fragmentation by default 2016-10-04 10:08:21 +02:00
Tobias Brunner af662a5170 starter: Enable IKE fragmentation by default 2016-10-04 10:08:21 +02:00
Tobias Brunner 0642f42bbe ike: Set default IKE fragment size to 1280
This is the minimum size an IPv6 implementation must support.  This makes
it the default for IPv4 too, which presumably is also generally routable
(otherwise, setting this to 0 falls back to the minimum of 576 for IPv4).
2016-10-04 10:08:21 +02:00
Tobias Brunner 6b2814ab0e Merge commit 'derived-keys'
Adds new listener hooks that work similar to the existing ike|child_keys
hooks but receive the derived IKE and CHILD_SA keys.
2016-10-04 10:06:00 +02:00
Tobias Brunner 0e80f5c3ff ikev2: Send derived CHILD_SA keys to the bus 2016-10-04 10:01:50 +02:00
Tobias Brunner 4f373c7f20 ikev2: Send derived IKE_SA keys to bus 2016-10-04 10:01:50 +02:00
Tobias Brunner c4a286c88a ikev1: Send derived CHILD_SA keys to the bus 2016-10-04 10:01:49 +02:00
Tobias Brunner a6dc7bf287 ikev1: Send derived IKE_SA keys to bus 2016-10-04 10:01:49 +02:00
Tobias Brunner f5fe0ffa2a bus: Add new hooks for derived IKE_SA and CHILD_SA keys 2016-10-04 10:01:49 +02:00
Tobias Brunner a28c6269a4 nm: Remove dummy TUN device
Recent NM releases don't insist on getting a device back from VPN
plugins.
2016-10-04 09:57:14 +02:00
Tobias Brunner 5b93de43c6 nm: Fix comment in service file in /etc/NetworkManager/VPN 2016-10-04 09:57:14 +02:00
Tobias Brunner 254099a090 nm: Remove generated service file in make clean 2016-10-04 09:57:13 +02:00
Tobias Brunner 96aebc1756 nm: Don't add generated AppStream metadata to tarball 2016-10-04 09:57:13 +02:00
Tobias Brunner dac15e03c8 bus: Fix maximum log levels when mixing log/vlog implementing loggers
The maximum would not get set correctly when a logger is removed and the
first remaining logger in the list (the one with the highest log level) does
e.g. only implement vlog() while there are other loggers that implement log().
This would result in only max_vlevel getting set correctly while max_level
would incorrectly get set to -1 so that log() would not get called for any
of the loggers anymore.

References #574.
2016-09-30 18:34:04 +02:00
Tobias Brunner 33d3ffde25 kernel-netlink: Pass zero mark to kernel if mask is set
The kernel will apply the mask to the mark on the packet and then
compare it to the configured mark.  So to match only unmarked packets we
have to be able to set 0/0xffffffff.
2016-09-30 15:35:32 +02:00
Tobias Brunner ac9759a532 kernel-netlink: Support configuring XFRM policy hashing thresholds
If the number of flows over a gateway exceeds the flow cache size of the Linux
kernel, policy lookup gets very expensive. Policies covering more than a single
address don't get hash-indexed by default, which results in wasting most of
the cycles in xfrm_policy_lookup_bytype() and its xfrm_policy_match() use.
Starting with several hundred policies the overhead gets inacceptable.

Starting with Linux 3.18, Linux can hash the first n-bit of a policy subnet
to perform indexed lookup. With correctly chosen netbits, this can completely
eliminate the performance impact of policy lookups, freeing the resources
for ESP crypto.

WARNING: Due to a bug in kernels 3.19 through 4.7, the kernel crashes with a
NULL pointer dereference if a socket policy is installed while hash thresholds
are changed.  And because the hashtable rebuild triggered by the threshold
change that causes this is scheduled it might also happen if the socket
policies are seemingly installed after setting the thresholds.
The fix for this bug - 6916fb3b10b3 ("xfrm: Ignore socket policies when
rebuilding hash tables") - is included since 4.8 (and might get backported).
As a workaround `charon.plugins.kernel-netlink.port_bypass` may be enabled
to replace the socket policies that allow IKE traffic with port specific
bypass policies.
2016-09-30 14:54:52 +02:00
Tobias Brunner 21c898a1f9 Merge branch 'fwd-out-policies-optional'
This makes the FWD policies in the out direction  optional (disabled by
default).  They may be enabled (e.g. if conflicting drop policies are
used) via the policies_fwd_out swanctl.conf option.
2016-09-28 17:59:21 +02:00
Tobias Brunner ad1b53454e child-sa: Only install outbound FWD policies if explicitly configured
They are only required if drop policies would otherwise prevent
forwarding traffic.  This reduces the number of policies and avoids
conflicts e.g. with SPD hash thresholds.
2016-09-28 17:56:44 +02:00
Tobias Brunner 62636da4f3 testing: Enable outbound FWD policies in swanctl/manual-prio scenario 2016-09-28 17:56:43 +02:00
Tobias Brunner 50721a61d8 vici: Make installation of outbound FWD policies configurable 2016-09-28 17:56:43 +02:00
Tobias Brunner c98e48cf0e child-cfg: Add setting that controls whether outbound FWD policies are installed 2016-09-28 17:56:43 +02:00
Tobias Brunner 175d78df60 kernel-netlink: Update cached reqid when updating policies 2016-09-28 17:55:01 +02:00
Tobias Brunner 8486b3b438 travis: Use a more recent OS X image
Using the xcode8 image does not work currently (libcurl is not found).
2016-09-27 09:19:34 +02:00
Tobias Brunner 11140e717f unit-tests: MGF1 tests depend on an XOF implementation not just a hash function
If the mgf1 plugin was not enabled (e.g. with the default configure
options) the tests failed.
2016-09-21 18:36:28 +02:00
Tobias Brunner e9e643b240 leak-detective: Fix compile warning due to unused variable if LD is disabled 2016-09-20 17:24:52 +02:00
Tobias Brunner f654324e5e Merge branch 'testing-leak-detective'
Test scenarios now fail if any leaks are detected by the leak detective.
Several leaks found this way have been fixed.
2016-09-20 16:26:58 +02:00
Tobias Brunner 95f9fa82d5 leak-detective: Whitelist thread ID getter
In case an external thread calls into our code and logs messages, a thread
object is allocated that will never be released.  Even if we try to clean
up the object via thread value destructor there is no guarantee that the
thread actually terminates before we check for leaks, which seems to be the
case for the Ada Tasking threads.
2016-09-20 16:26:05 +02:00
Tobias Brunner 6250e813ca charon-tkm: Build C code with debug information 2016-09-20 16:26:05 +02:00