Commit Graph
100 Commits
Author SHA1 Message Date
Martin Willi 65cc8f5581 vici: Properly skip raise_event() for unknown event names 2014-05-07 14:13:38 +02:00
Martin Willi 3a9a46c20f vici: Increase vici message length header from 16 to 32 bits
While we currently have no need for messages larger than 65KB, we should design
the protocol to be future-proof, as we plan to keep at least to lowest protocol
layer stable.

To avoid any allocation issues, we currently keep the message size limit at
512KB.
2014-05-07 14:13:38 +02:00
Martin Willi 7dbf9e1574 vici: Document strongswan.conf options 2014-05-07 14:13:38 +02:00
Martin Willi f3e1ec4a85 vici: Have an explicit "relaxed" keyword for the default revocation policy 2014-05-07 14:13:38 +02:00
Martin Willi 585814470d vici: Use a default child rekey time of 1 hour 2014-05-07 14:13:38 +02:00
Martin Willi 046befeca5 vici: Use a default IKE rekey time of 4 hours 2014-05-07 14:13:38 +02:00
Martin Willi ff3217db4b vici: Add low-level IPC protocol description 2014-05-07 14:13:38 +02:00
Martin Willi c193732162 vici: Fix descending into non-matching sections during key find 2014-05-07 14:13:38 +02:00
Martin Willi eacf864c21 vici: Add an IKE virtual IP and attribute backend 2014-05-07 14:13:38 +02:00
Martin Willi afb8f492ef vici: Support referencing external named pools for peer configs 2014-05-07 14:13:37 +02:00
Martin Willi 3ad9c34c92 vici: Actually add configured virtual IPs to peer config 2014-05-07 14:13:37 +02:00
Martin Willi e651afe67b vici: Use a default rand_time of the difference between hard and soft lifetimes 2014-05-07 14:13:37 +02:00
Martin Willi c520510508 vici: Use a default hard lifetime of 110% of the soft lifetime 2014-05-07 14:13:37 +02:00
Martin Willi 93d60c479a vici: Make unit-tests independent from libcharon and libhydra
Fixes monolithic build, as we can't depend on the not yet built libcharon.
2014-05-07 14:13:37 +02:00
Martin Willi 0963a9952c vici: Don't compare unsigned certificate_type_t to -1 2014-05-07 14:13:37 +02:00
Martin Willi e00ce378fa vici: Use non-blocking first read when receiving message during client on_read()
As select() and finally the watcher may signal an FD even if it does not
actually have data, we must make a non-block read to avoid hanging in the
read callback.
2014-05-07 14:13:37 +02:00
Martin Willi 7de35b7ff6 vici: Perform specified start_action on connection load, undo it on unload 2014-05-07 14:13:37 +02:00
Martin Willi 96071fdb55 vici: Add a generic log event to raise events for log messages 2014-05-07 14:13:37 +02:00
Martin Willi 2676ffdb9f vici: Be less verbose about client connections
Instead, log the explicit commands at a higher level.
2014-05-07 14:13:37 +02:00
Martin Willi 101dba01ce vici: Add a list-certs command to query different certificate types 2014-05-07 14:13:37 +02:00
Martin Willi b57739f721 vici: Support pinning end entity and CA certificates to connections 2014-05-07 14:13:37 +02:00
Martin Willi e6e975ff9d vici: Support missing groups option in auth config 2014-05-07 14:13:37 +02:00
Martin Willi 6efa792d22 vici: Add a load-shared command to load shared IKE and EAP secrets 2014-05-07 14:13:37 +02:00
Martin Willi 559ef7de48 vici: Add a load-key command to load private keys 2014-05-07 14:13:36 +02:00
Martin Willi c12edb2a27 vici: Support loading of different certificate types 2014-05-07 14:13:36 +02:00
Martin Willi de190f62c2 vici: Add a credential backend 2014-05-07 14:13:36 +02:00
Martin Willi e1b65630b2 vici: Add a command listing all or specific loaded connections using events 2014-05-07 14:13:36 +02:00
Martin Willi 501ddf127b vici: Add unload-conn and get-conns commands to manage loaded connections 2014-05-07 14:13:36 +02:00
Martin Willi 37aa250cad vici: Make dispatcher a little more verbose 2014-05-07 14:13:36 +02:00
Martin Willi b3d8bd8d26 vici: Add backend providing in-memory connections 2014-05-07 14:13:36 +02:00
Martin Willi dd5ce0a97a vici: Add generic callback based vici message parsing 2014-05-07 14:13:36 +02:00
Martin Willi 1f2e63ea41 vici: Add a list-policy command to query trap and shunt policies 2014-05-07 14:13:36 +02:00
Martin Willi 5c6e81dcf8 vici: Add install/uninstall commands to manage trap and shunt policies 2014-05-07 14:13:36 +02:00
Martin Willi 550f3f5646 vici: Extract CHILD_SA config lookup method 2014-05-07 14:13:36 +02:00
Martin Willi e567675d29 vici: Refactor socket to clean up locking
Uses separate locks for socket read and write operations. While holding the
socket reader lock, a different thread can still claim the socket write lock.
This allows to asynchronously send event messages while holding the read
lock.
2014-05-07 14:13:36 +02:00
Martin Willi 9bfa397eba vici: Fix dispatcher leak when handling unknown request 2014-05-07 14:13:36 +02:00
Martin Willi e2496bda02 vici: Add a test case raising events during request, checks in-order delivery 2014-05-07 14:13:35 +02:00
Martin Willi 3b5808a0f6 vici: Avoid recursive control log invocations 2014-05-07 14:13:35 +02:00
Martin Willi 993bfe95fb vici: Add a callback based recursive parser function 2014-05-07 14:13:35 +02:00
Martin Willi d9ae1c68e5 vici: Add a version command to print daemon and OS version info 2014-05-07 14:13:35 +02:00
Martin Willi c7d4dad66d vici: Implement a terminate command to close IKE or CHILD_SAs 2014-05-07 14:13:35 +02:00
Martin Willi 5f95657c65 vici: Add a control backend, currently to initiate connections by name 2014-05-07 14:13:35 +02:00
Martin Willi ecc4b51048 vici: Support thread cancellation in command callbacks 2014-05-07 14:13:35 +02:00
Martin Willi 045bdf5283 vici: Move dumping to core message class, use it in libvici 2014-05-07 14:13:35 +02:00
Martin Willi 7f4cfdff58 vici: Add convenience value/string/integer getter to libvici 2014-05-07 14:13:35 +02:00
Martin Willi db18495514 vici: Add some convenience getters on message 2014-05-07 14:13:35 +02:00
Martin Willi b40a12a96f vici: Raise events with an optional identifier for specific connections 2014-05-07 14:13:35 +02:00
Martin Willi 293431269b vici: Invoke dispatcher outside of connection log, allowing events from commands 2014-05-07 14:13:35 +02:00
Martin Willi 252025210f vici: Add a query class, currently implementing a list-sas command 2014-05-07 14:13:35 +02:00
Martin Willi eb4fd014b8 vici: Add a libvici low-level client library 2014-05-07 14:13:35 +02:00
Martin Willi 8383d626b9 vici: Provide a command dispatcher handling request and event registration 2014-05-07 14:13:34 +02:00
Martin Willi 8457da7528 vici: Add a fully asynchronous IPC socket segmenting messages on/from stream 2014-05-07 14:13:34 +02:00
Martin Willi 1e39454214 vici: Add a test runner for plugin 2014-05-07 14:13:34 +02:00
Martin Willi 6770cfe34a vici: Add a plugin stub for the "Versatile IKE Control Interface" plugin 2014-05-07 14:13:34 +02:00
Martin Willi d4368689a0 mem-cred: Replace existing equal shared keys during add_shared() 2014-05-07 14:13:34 +02:00
Martin Willi f8223f5f7e mem-cred: Replace existing equal private keys during add_key() 2014-05-07 14:13:34 +02:00
Martin Willi d2b07d3187 watcher: Don't wait for running callback once watcher thread cancelled
During shutdown, waiting for callbacks might never complete, as queued
callbacks might not get executed under certain conditions. Not the clean fix,
but works good enough for now.

Seen on Windows in vici tests.
2014-05-07 14:13:34 +02:00
Martin Willi d16d5a245f watcher: Avoid queueing multiple watcher callbacks at the same time
While we don't add FDs with an active callback to the watched FDSET, we still
can get notifications for callbacks active due the asynchronous processing
of the same.

To avoid queue multiple callbacks, we check for queued callbacks before
activating new ones.
2014-05-07 14:13:34 +02:00
Martin Willi 874e212f71 processor: Flush pending jobs during cancel(), not destroy
During shutdown, cancel queued jobs earlier to avoid having cleanup functions
accessing infrastructure not available anymore, for example watcher.
2014-05-07 14:13:34 +02:00
Martin Willi 9e93251397 utils: Provide a CALLBACK macro, similar to METHOD, but for void* callbacks
Using the same mechanism as the METHOD macro, the CALLBACK macro defines
a hybrid function signature. It strictly uses a weak void* for the first
function parameter, in contrast to the dynamic METHOD object "this" type.
2014-05-07 14:13:34 +02:00
Martin Willi dba3c649da travis: --disable-aikgen in "all" tests
aikgen has a hard dependency on TrouSerS, which we currently don't have in the
travis build.
2014-05-07 14:12:13 +02:00
Martin Willi f91c7d85c4 Merge branch 'unit-tests'
Bring some minor improvements to unit testing, including more flexible
configuration.
2014-04-30 17:23:55 +02:00
Martin Willi 523dd96558 unit-tests: Document the supported env variables 2014-04-30 17:22:48 +02:00
Martin Willi 20924ae28f unit-tests: Add a ck_assert_chunk_eq() convenience macro 2014-04-30 17:22:48 +02:00
Martin Willi 0456aa616f unit-tests: Silence a literal signedness warning raised by GCC 4.6.3 2014-04-30 17:22:48 +02:00
Martin Willi 8dcde902e4 packages: New Debian network-manager-strongswan release 2014-04-24 15:53:38 +02:00
Martin Willi 9c00ec3a86 packages: Hand over network-manager-strongswan debian package maintenance 2014-04-24 15:53:38 +02:00
Martin Willi 1db1e7cd7a packages: Use charon-nm in network-manager-strongswan debian package 2014-04-24 15:53:38 +02:00
Martin Willi 65117a0764 nm: Bump NetworkManager plugin version to 1.3.1 2014-04-24 15:53:38 +02:00
Martin Willi 95083fc6fb Merge branch 'reauth-collision'
Fixes two collisions between IKE_SA re-authentication and CHILD_SA rekeying.
2014-04-17 10:14:49 +02:00
Martin Willi 0b3bea3965 ike: Delay actively initiated reauthentication when other exchanges in progress
If any other IKE or CHILD_SA operation takes places, we should not start
initiating reauthentication to avoid any potential races.
2014-04-17 09:59:06 +02:00
Martin Willi f02cabbe35 ikev2: Reject CHILD_SA creation/rekeying while deleting an IKE_SA
If one peer starts reauthentication by deleting the IKE_SA, while the other
starts CHILD_SA rekeying, we run in a race condition. To avoid it, temporarily
reject the rekey attempt while we are in the IKE_SA deleting state.

RFC 4306/5996 is not exactly clear about this collision, but it should be safe
to reject CHILD_SA rekeying during this stage, as the reauth will re-trigger the
CHILD_SA. For non-rekeying CHILD_SA creations, it's up to the peer to retry
establishing the CHILD_SA on the reauthenticated IKE_SA.
2014-04-17 09:59:06 +02:00
Martin Willi 094963d1b1 ikev2: Apply extensions and conditions before starting rekeying
The extensions and conditions apply to the rekeyed IKE_SA as well, so we should
migrate them. Especially when using algorithms from private space, we need
EXT_STRONGSWAN to properly select these algorithms during IKE rekeying.
2014-04-17 09:24:51 +02:00
Martin Willi 713a1122b4 ikev2: Add inherit_pre() to apply config and hosts before IKE_SA rekeying 2014-04-17 09:24:51 +02:00
Martin Willi c4c9d291d2 ikev1: Add an option to accept unencrypted ID/HASH payloads
Even in Main Mode, some Sonicwall boxes seem to send ID/HASH payloads in
unencrypted form, probably to allow PSK lookup based on the ID payloads. We
by default reject that, but accept it if the
charon.accept_unencrypted_mainmode_messages option is set in strongswan.conf.

Initial patch courtesy of Paul Stewart.
2014-04-17 08:52:28 +02:00
Martin Willi 8503077175 ikev2: Reject CREATE_CHILD_SA exchange on unestablished IKE_SAs
Prevents a responder peer to trick us into established state by starting
IKE_SA rekeying before the IKE_SA has been authenticated during IKE_AUTH.

Fixes CVE-2014-2338.
2014-04-14 13:29:49 +02:00
Martin Willi b87f7840bc Merge branch 'tls-unit-tests'
Add some initial unit-tests to libtls, testing all supported cipher suites
against self, both with and without client authentication, for all supported
TLS versions.
2014-04-01 14:53:28 +02:00
Martin Willi 5ba9f73457 tls: Add a test case to check correct enum name mapping of cipher suites 2014-04-01 14:52:18 +02:00
Martin Willi 2c8d77394c tls: Add socket based tests testing all supported suites with TLS 1.2/1.1/1.0 2014-04-01 14:52:18 +02:00
Martin Willi 74162ed997 tls: Remove superfluous initializers in TLS AEAD implementations 2014-04-01 14:52:18 +02:00
Martin Willi e15f64cc81 tls: Support a maximum TLS version to negotiate using TLS socket abstraction 2014-04-01 14:28:55 +02:00
Martin Willi 5313880261 tls: Support a null encryption flag on TLS socket abstraction 2014-04-01 14:28:55 +02:00
Martin Willi ddf5222096 tls: Introduce a generic TLS purpose that accepts NULL encryption ciphers 2014-04-01 14:28:55 +02:00
Martin Willi ac5717c9e9 tls: Export a function to list supported TLS cipher suites 2014-04-01 14:28:55 +02:00
Martin Willi c0efaaebe3 tls: Create a unit-test runner 2014-04-01 14:28:55 +02:00
Martin Willi 70889c42a6 unit-tests: Catch timeouts during test runner deinit function
The test runner deinit function often cancels all threads from the pool. This
operation might hang on error conditions, hence we should include that hook in
the test timeout to fail properly.
2014-04-01 14:28:55 +02:00
Martin Willi 4e8ff4f010 unit-tests: Prevent a failing worker thread to go wild after it fails
A worker raises SIGUSR1 to inform the main thread that the test fails. The main
thread then starts cancelling workers, but the offending thread should be
terminated immediately to prevent it from test continuation.
2014-04-01 14:28:54 +02:00
Martin Willi e2e0165605 Merge branch 'tls-aead'
Adds AEAD support to the TLS stack, currently supporting AES-GCM. Brings fixes
for TLS record fragmentation, enforcing TLS versions < 1.2 and proper signature
scheme support indication.
2014-03-31 16:17:57 +02:00
Martin Willi 7dc7fdea72 NEWS: Note TLS AEAD mode 2014-03-31 16:17:15 +02:00
Martin Willi e67e8dd197 tls: Fix some TLS cipher suite enum names
It is important to have them mapped correctly, as we use these official TLS
identifiers to configure specific TLS suites.
2014-03-31 16:07:53 +02:00
Martin Willi b37080f8c9 tls: Include TLS version announced in Client Hello in encrypted premaster
While a hardcoded 1.2 version is fine when we offer that in Client Hello, we
should include the actually offered version if it has been reduced before
starting the exchange.
2014-03-31 16:07:53 +02:00
Martin Willi f93497507f tls: Check for minimal TLS record length before each record iteration
Fixes fragment reassembling if a buffer contains more than one record, but
the last record contains a partial TLS record header. Thanks to Nick Saunders
and Jamil Nimeh for identifying this issue and providing a fix for it.
2014-03-31 15:56:12 +02:00
Martin Willi b886dad498 tls: Fix AEAD algorithm filtering, avoid filtering all suites if no AEAD found 2014-03-31 15:56:12 +02:00
Martin Willi 48d6b57c30 tls: Offer TLS signature schemes in ClientHello in order of preference
Additionally, we now query plugin features to find out what schemes we exactly
support.
2014-03-31 15:56:12 +02:00
Martin Willi d06890d6e2 tls: Define AES-GCM cipher suites from RFC 5288/5289 2014-03-31 15:56:12 +02:00
Martin Willi f0f301170b tls: Implement the TLS AEAD abstraction for real AEAD modes 2014-03-31 15:56:12 +02:00
Martin Willi d3204677ba tls: Separate TLS protection to abstracted AEAD modes
To better separate the code path for different TLS versions and modes of
operation, we introduce a TLS AEAD abstraction. We provide three implementations
using traditional transforms, and get prepared for TLS AEAD modes.
2014-03-31 15:56:12 +02:00
Martin Willi e5d73b0dfa aead: Support custom AEAD salt sizes
The salt, or often called implicit nonce, varies between AEAD algorithms and
their use in protocols. For IKE and ESP, GCM uses 4 bytes, while CCM uses
3 bytes. With TLS, however, AEAD mode uses 4 bytes for both GCM and CCM.

Our GCM backends currently support 4 bytes and CCM 3 bytes only. This is fine
until we go for CCM mode support in TLS, which requires 4 byte nonces.
2014-03-31 15:56:12 +02:00
Martin Willi e12eec1008 ikev2: Recreate a CHILD_SA that got a hard lifetime expire without rekeying
Works around issues related to system time changes and kernel backends using
that system time, such as Linux XFRM.
2014-03-31 15:08:22 +02:00
Martin Willi 94fb33bb88 revocation: Log error if no OCSP signer candidate found
Fixes evaluation of ikev2/ocsp-untrusted-cert.
2014-03-31 15:02:17 +02:00