summaryrefslogtreecommitdiff
path: root/lib/libtls/tls_config.c
AgeCommit message (Collapse)Author
2019-11-16Allow portable to override the default CA bundle locationBob Beck
ok kinichiro@ jsing@
2019-04-04Switch to pthread_mutex_init().Joel Sing
While PTHREAD_MUTEX_INITIALIZER can be used on OpenBSD, some other platforms do not like it. Noted by bcook@
2019-04-01Add a mutex to guard reference counting for tls_config.Joel Sing
This makes libtls more friendly for multithreaded use - otherwise we can end up with incorrect refcounts and end up freeing when we should not be (or not freeing when we should be). ok beck@
2019-03-27remove duplicate set key file call. from alf.Ted Unangst
ok jsing
2018-11-29expose the default cert file as a function, not a define. it's reallyTed Unangst
an internal detail of the library, so the string should live inside it, not in the application code. ok jsing
2018-04-07Correct tls_config_clear_keys() behaviour.Joel Sing
Previously this incorrectly called tls_keypair_clear(), which results in the private key being cleared, along with the certificate, OCSP staple and pubkey hash. This breaks OCSP stapling if tls_config_clear_keys() is called following tls_configure(), as is done by httpd. Fix this by calling tls_keypair_clear_key() so that only the private key is cleared, leaving the other public data untouched. While here, remove tls_keypair_clear() and fold the necessary parts into tls_keypair_free(). ok beck@
2018-03-20Avoid potentially calling strchr() on a NULL pointer inJoel Sing
tls_config_set_ecdhecurve(). Spotted by Coverity.
2018-03-19Automatically handle library initialisation for libtls.Joel Sing
Now that we have tls_init() under pthread_once(), automatically initialise libtls from the entry point functions (tls_config(), tls_client() and tls_server()) - this makes an explicit tls_init() call no longer a requirement. ok bcook@ beck@ inoguchi@
2018-02-10Move the keypair pubkey hash handling code to during config.Joel Sing
The keypair pubkey hash was being generated and set in the keypair when the TLS context was being configured. This code should not be messing around with the keypair contents, since it is part of the config (and not the context). Instead, generate the pubkey hash and store it in the keypair when the certificate is configured. This means that we are guaranteed to have the pubkey hash and as a side benefit, we identify bad certificate content when it is provided, instead of during the context configuration. ok beck@
2018-02-10Add support to libtls for client-side TLS session resumption.Joel Sing
A libtls client can specify a session file descriptor (a regular file with appropriate ownership and permissions) and libtls will manage reading and writing of session data across TLS handshakes. Discussed at length with deraadt@ and tedu@. Rides previous minor bump. ok beck@
2018-02-08Split keypair handling out into its own file - it had already appearedJoel Sing
in multiple locations. ok beck@
2018-02-05Be consistent with the goto label names used in libtls code.Joel Sing
No change to generated assembly.
2017-12-09Make tls_config_parse_protocols() work correctly when passed a NULL pointerJoel Sing
for a protocol string. Issue found by semarie@, who also provided the diff.
2017-09-25If tls_config_parse_protocols() is called with a NULL pointer, return theJoel Sing
default protocols instead of crashing - this makes the behaviour more useful and mirrors what we already do in tls_config_set_ciphers() et al.
2017-08-10Add a tls_config_set_ecdhecurves() function to libtls, which allows theJoel Sing
names of the elliptic curves that may be used during client and server key exchange to be specified. This deprecates tls_config_set_ecdhecurve(), which could only be used to specify a single supported curve. ok beck@
2017-08-09Don't use tls_cert_hash for the hashing used by the engine offloading magicClaudio Jeker
for the TLS privsep code. Instead use X509_pubkey_digest() because only the key should be used as identifier. Relayd is rewriting certificates and then the hash would change. Rename the hash is struct tls_keypair to pubkey_hash to make clear what this hash is about. With input and OK jsing@
2017-07-06Add support for providing CRLs to libtls - once a CRL is provided weJoel Sing
enable CRL checking for the full certificate chain. Based on a diff from Jack Burton <jack at saosce dot com dot au>, thanks! Discussed with beck@
2017-05-06Perform reference counting for tls_config. This allows tls_config_free() toJoel Sing
be called as soon as it has been passed to the final tls_configure() call, simplifying lifetime tracking for the application. Requested some time ago by tedu@. ok beck@
2017-05-02use freezero() instead of memset/explicit_bzero + free. SubstantiallyTheo de Raadt
reduces conditional logic (-218, +82). MOD_EXP_CTIME_MIN_CACHE_LINE_WIDTH cache alignment calculation bn/bn_exp.c wasn'tt quite right. Two other tricky bits with ASN1_STRING_FLAG_NDEF and BN_FLG_STATIC_DATA where the condition cannot be collapsed completely. Passes regress. ok beck
2017-04-30Add a tls_keypair_clear_key() function that uses freezero() to make keyJoel Sing
material inaccessible, then call it from the appropriate places. ok beck@
2017-04-05Internal changes to allow for relayd engine privsep. sends the hash of theBob Beck
public key as an identifier to RSA, and adds an function for relayd to use to disable private key checking when doing engine privsep. ok jsing@
2017-01-31Add tls_config_[add|set]keypair_ocsp functions so that ocsp staples may beBob Beck
added associated to a keypair used for SNI, and are usable for more than just the "main" certificate. Modify httpd to use this. Bump libtls minor. ok jsing@
2017-01-29Move the ocsp staple to being part of the keypair structure internally,Bob Beck
so that it does not send back bogus staples when SNI is in use. (Further change is required to be able to use staples on all keypairs and not just the main one) ok jsing@
2017-01-24Introduce ticket support. To enable them it is enough to set a positiveClaudio Jeker
lifetime with tls_config_set_session_lifetime(). This enables tickets and uses an internal automatic rekeying mode for the ticket keys. If multiple processes are involved the following functions can be used to make tickets work accross all instances: - tls_config_set_session_id() sets the session identifier - tls_config_add_ticket_key() adds an encryption and authentication key For now only the last 4 keys added will be used (unless they are too old). If tls_config_add_ticket_key() is used the caller must ensure to add new keys regularly. It is best to do this 4 times per session lifetime (which is also the ticket key lifetime). Since tickets break PFS it is best to minimize the session lifetime according to needs. With a lot of help, input and OK beck@, jsing@
2016-11-11Change the return value of tls_config_set_protocols() andJoel Sing
tls_config_set_verify_depth() from void to int. This makes them consistent with all other tls_config_set_* functions and will allow for call time validation to be implemented. Rides libtls major bump. ok beck@
2016-11-05Add support for server side OCSP stapling to libtls.Bob Beck
Add support for server side OCSP stapling to netcat.
2016-11-04Make the tls_keypair_new() function a valid prototype.Joel Sing
2016-11-04Avoid another signed vs unsigned comparison.Joel Sing
ok miod@
2016-11-04Add ocsp_require_stapling config option for tls - allows a connectionBob Beck
to indicate that it requires the peer to provide a stapled OCSP response with the handshake. Provide a "-T muststaple" for nc that uses it. ok jsing@, guenther@
2016-08-22Provide an API that enables server side SNI support - add the ability toJoel Sing
provide additional keypairs (via tls_config_add_keypair_{file,mem}()) and allow the server to determine what servername the client requested (via tls_conn_servername()). ok beck@
2016-08-13Avoid leaking memory if tls_config_set_alpn() is called multiple timesJoel Sing
(this was in the original commit, but got reverted in the recommit).
2016-08-13Load CA, certificate and key files into memory when the appropriateJoel Sing
tls_config_set_*_file() function is called. This allows us to immediately propagate useful error messages, play more nicely with privsep/pledge and have a single code path. Instead of always loading the default CA when tls_config_new() is called, defer and only load the default CA when tls_configure() is invoked, if a CA has not already been specified. ok beck@ bluhm@
2016-08-12Add ALPN support to libtls.Joel Sing
ok beck@ doug@
2016-08-02Revert previous since it adds new symbols.Joel Sing
Requested by deraadt@
2016-08-01Add ALPN support to libtls.Joel Sing
ok beck@ doug@
2016-07-13Split the existing TLS cipher suite groups into four:Joel Sing
"secure" (TLSv1.2+AEAD+PFS) "compat" (HIGH:!aNULL) "legacy" (HIGH:MEDIUM:!aNULL) "insecure" (ALL:!aNULL:!eNULL) This allows for flexibility and finer grained control, rather than having two extremes (an issue raised by Marko Kreen some time ago). ok beck@ tedu@
2016-07-07Revert previous - it introduces problems with a common privsep use case.Joel Sing
2016-07-06Check that the given ciphers string is syntactically valid and results inJoel Sing
at least one matching cipher suite. ok doug@
2016-07-06Always load CA, key and certificate files at the time the configurationJoel Sing
function is called. This simplifies code and results in a single memory based code path being used to provide data to libssl. Errors that occur when accessing the specified file are now detected and propagated immediately. Since the file access now occurs when the configuration function is called, we now play nicely with privsep/pledge. ok beck@ bluhm@ doug@
2016-05-27Rename some of the internal error setting functions to more closely followJoel Sing
existing naming standards. Also provide functions for setting a struct tls_error * directly (rather than having to have a struct tls * or a struct tls_config *).
2016-05-27Avoid leaking ca_mem when freeing a tls_config.Joel Sing
2016-04-28Factor our the keypair handling in libtls. This results in more readableJoel Sing
and self-contained code, while preparing for the ability to handle multiple keypairs. Also provide two additional functions that allow a public certificate and private key to be set with a single function call. ok beck@
2016-04-28Rework the error handling in libtls so that we can associate errors withJoel Sing
both configuration and contexts. This allows us to propagate errors that occur during configuration, rather than either just failing with no reason or delaying the failure until it can be propagated via the tls context. Also provide a tls_config_error() function for retrieving the last error from a tls_config *. ok bcook@
2015-09-29clean some ugly intendation wartsTheo de Raadt
2015-09-14Provide tls_config_insecure_noverifytime() in order to be able to disableJoel Sing
certificate validity checking. ok beck@
2015-09-10Add support for preferring the server's cipher list or the client's cipherJoel Sing
list. Prefer the server's cipher list by default. Based on a diff from Kyle Thompson <jmp at giga dot moe>. ok beck@ bcook@
2015-09-09Indent labels with a space so that diff -p is more friendly.Joel Sing
Requested by bluhm@
2015-09-09Add client certificate support. Still needs a few tweaks but this willBob Beck
ride upcoming minor bump ok jsing@
2015-02-22Rename tls_config_insecure_noverifyhost() toJoel Sing
tls_config_insecure_noverifyname(), so that it is more accurate and keeps inline with the distinction between DNS hostname and server name. Requested by tedu@ during s2k15.
2015-02-22Check return values when setting dheparams and ecdhecurve for the defaultJoel Sing
configuration.