summaryrefslogtreecommitdiff
path: root/lib/libssl/ssl_srvr.c
AgeCommit message (Collapse)Author
2018-12-07Remove an ugly hack in the client certificate verification code that worksTheo Buehler
around broken GOST implementations. It looks like client certificates with GOST have been completely broken since reimport of the GOST code, so no-one is using LibreSSL this way. The client side was fixed only last week for TLSv1.0 and TLSv1.1. This workaround is now in the way of much needed simplifcation and cleanup, so it is time for it to go. suggested by and ok jsing
2018-11-21Fix DTLS transcript handling for HelloVerifyRequest.Joel Sing
If DTLS sees a HelloVerifyRequest the transcript is reset - the previous tls1_init_finished_mac() function could be called multiple times and would discard any existing state. The replacement tls1_transcript_init() is more strict and fails if a transcript already exists. Provide an explicit tls1_transcript_reset() function and call it from the appropriate places. This also lets us make DTLS less of a special snowflake and call tls1_transcript_init() in the same place as used for TLS. ok beck@ tb@
2018-11-11Add check function to verify that pkey is usable with a sigalg.Bob Beck
Include check for appropriate RSA key size when used with PSS. ok tb@
2018-11-11quiet warning on other compilersBrent Cook
ok beck@
2018-11-11Free the server tls transcript in case session reuse did not work.Alexander Bluhm
Regression found by Perl module p5-IO-Socket-SSL tests. with beck@ tb@
2018-11-11Add support for RSA PSS algorithims being used in sigalgs.Bob Beck
lightly tested, but will need sanity checks and regress test changes before being added to any sigalgs list for real ok jsing@ tb@
2018-11-11Convert signatures and verifcation to use the EVP_DigestXXX apiBob Beck
to allow for adding PSS, Nuke the now unneejded guard around the PSS algorithms in the sigalgs table ok jsing@ tb@
2018-11-10Stop keeping track of sigalgs by guessing it from digest and pkey,Bob Beck
just keep the sigalg around so we can remember what we actually decided to use. ok jsing@
2018-11-09Ensure we only choose sigalgs from our prefernce list, not the whole listBob Beck
ok jsing@
2018-11-09Add the ability to have a separate priority list for sigalgs.Bob Beck
Add a priority list for tls 1.2 ok jsing@
2018-11-09Reimplement the sigalgs processing code into a new implementationBob Beck
that will be usable with TLS 1.3 with less eye bleed. ok jsing@ tb@
2018-11-08Clean up and simplify the handshake transcript code.Joel Sing
This provides a cleaner, simpler and more readable API, with code that uses a BUF_MEM instead of a BIO. ok beck@ ("hurry up") and tb@.
2018-11-08Stop pretending that a cert member in a SSL and SSL_CTX can be NULL.Joel Sing
ok beck@ tb@
2018-11-08Ensure the handshake transcript is cleaned up.Joel Sing
Add a check at the completion of the client/server handshake to ensure that the handshake transcript has been freed. Fix the case where a server asks the client for a certificate, but it does not have one, resulting in the handshake transcript being left around post-handshake. ok bcook@ tb@
2018-08-27Convert ssl3_get_cert_verify() to CBS and clean up somewhat.Joel Sing
ok inoguchi@
2018-08-27Add some missing statics.Joel Sing
2018-08-27Simplify new session ticket encoding/generation.Joel Sing
The original code did a crazy encode/malloc/encode/decode/modify/encode dance, in order to encode a session in the form needed to encrypt then add to a session ticket. By modifying the encoding functions slightly, we can do this entire dance as a single encode. Inspired by similar changes in BoringSSL. ok inoguchi@ tb@
2018-08-24Simplify session ticket parsing/handling.Joel Sing
The original implementation is rather crazy and means that we effectively have two lots of code that parse a ClientHello and two lots of code that parse TLS extensions. Partially simplify this by passing a CBS containing the extension block through to the session handling functions, removing the need to reimplement the ClientHello parsing. While here standarise on naming for session_id and session_id_len. ok inoguchi@ tb@
2018-08-24Pull up the parsing of a ClientHello.Joel Sing
Parse up until the extensions (if any), then proceed with processing, rather than gradually parsing while processing. This makes the code cleaner, requires messages to be valid before processing and makes way for upcoming changes. ok inoguchi@ tb@
2018-08-24Clean up handshake message start/finish functions.Joel Sing
Now that all handshake messages are created using CBB, remove the non-CBB ssl3_handshake_msg_start()/ssl3_handshake_msg_finish() functions. Rename the CBB variants by dropping the _cbb suffix. ok bcook@ inoguchi@ tb@
2018-08-22Correct session ticket encryption.Joel Sing
The CBB conversion resulted in the ticket encryption being handled incorrectly, resulting in only the last block being used. Fix this and restore the previous behaviour. Issue found by inoguchi@ and sebastia@. ok inoguchi@ and tb@
2018-08-19Rename and collapse tls12_get_sigandhash_cbb().Joel Sing
Now that all callers of tls12_get_sigandhash() have been converted to CBB, collapse tls12_get_sigandhash() and tls12_get_sigandhash_cbb() into a single function. Rename it to tls12_gethashandsig() to be representative of the actual order of the sigalgs parameters, and perform some other clean up. ok inoguchi@ tb@
2018-08-19Convert ssl3_send_newsession_ticket() to CBB.Joel Sing
This removes a memorable BUF_MEM_grow() and associated comment. ok inoguchi@ tb@
2018-08-16Simplify the add signature code/logic in ssl3_send_server_key_exchange().Joel Sing
ok tb@
2018-08-16Convert ssl3_send_server_key_exchange() to CBB.Joel Sing
ok inoguchi@ tb@
2018-08-14Actually check the return values for EVP_Sign* and EVP_Verify*.Joel Sing
ok bcook@ beck@ tb@
2018-08-10Simplify server kex exchange signature generation.Joel Sing
Everything can go through the single EVP_Sign* code path. ok inoguchi@ tb@
2018-06-10Now that all of the server-side client key exchange processing functionsJoel Sing
have been converted to CBS, pull it up a level. ok inoguchi@ tb@
2018-06-03Allocate a dedicated buffer for use when deriving a shared key duringJoel Sing
client KEX DHE processing, rather than reusing the buffer that is used to send/receive handshake messages. ok beck@ inoguchi@
2018-06-02Convert ssl3_get_client_kex_ecdhe_ecp() to CBS.Joel Sing
Also allocate a dedicated buffer to hold the shared secret, rather than reusing init_buf. ok inoguchi@ tb@
2018-05-19Clean out a pile of cruft from ssl3_get_client_kex_ecdhe_ecp().Joel Sing
For pure ECDHE we do not need to construct a new key using the one that was set up during the other half of the key exchange. Also, since we do not support any form of ECDH the n == 0 case is not valid (per RFC 4492 section 5.7), so we can ditch this entirely. ok inoguchi@ tb@
2018-05-19Convert ssl3_get_client_kex_gost() to CBS.Joel Sing
ok beck@ tb@
2018-05-13More clean up of the RSA key exchange code.Joel Sing
Convert to CBS, use more appropriate variable names and improve validation. Allocate a dedicated buffer to hold the decrypted result, rather than decrypting into the handshake buffer (which is also used to send data). ok beck@ inoguchi@ tb@
2018-04-11Nuke SSL_OP_TLS_ROLLBACK_BUG - this is a workaround for buggy clients fromJoel Sing
around the SSLv3/TLSv1.0 period... and buggy clients are buggy. This also helps to clean up the RSA key exchange code. ok "kill it with fire" beck@ tb@
2018-01-28Initialize variables to avoid compiler warningsKinichiro Inoguchi
ok jsing@
2018-01-27Complete the TLS extension handling rewrite for the server-side.Joel Sing
This removes ssl_parse_clienthello_tlsext() and allows the CBS to be passed all the way through from ssl3_get_client_hello(). The renegotation check gets pulled up into ssl3_get_client_hello() which is where other such checks exist. The TLS extension parsing now also ensures that we do not get duplicates of any known extensions (the old pre-rewrite code only did this for some extensions). ok inoguchi@
2017-10-12Fold dtls1_accept() into ssl_accept(), removing a lot of duplicated code.Joel Sing
With review/feedback from inoguchi@
2017-10-11Fully convert ssl3_send_server_hello() to CBB.Joel Sing
Based on a diff from doug@
2017-10-10Make ssl_bytes_to_cipher_list() take a CBS, rather than a pointer andJoel Sing
length, since the caller has already been converted to CBS. A small amount of additional clean up whilst here.
2017-10-08Fix some style/whitespace/indentation issues in ssl3_accept().Joel Sing
2017-08-12Convert TLS signature algorithms extension handling to the new framework.Joel Sing
ok beck@ doug@
2017-08-12Remove NPN support.Joel Sing
NPN was never standardised and the last draft expired in October 2012. ALPN was standardised in July 2014 and has been supported in LibreSSL since December 2014. NPN has also been removed from Chromium in May 2016. TLS clients and servers that try to use/enable NPN will fail gracefully and fallback to the default protocol, since it will essentially appear that the otherside does not support NPN. At some point in the future we will actually remove the NPN related symbols entirely. ok bcook@ beck@ doug@
2017-08-12Remove support for DSS/DSA, since we removed the cipher suites a whileJoel Sing
back. ok guenther@
2017-08-11Convert ssl3_send_certificate_request() to CBB.Joel Sing
ok beck@ doug@
2017-08-10Clean up the EC key/curve configuration handling.Joel Sing
Over the years OpenSSL grew multiple ways of being able to specify EC keys (and/or curves) for use with ECDH and ECDHE key exchange. You could specify a static EC key (SSL{_CTX,}_set_tmp_ecdh()), use that as a curve and generate ephemeral keys (SSL_OP_SINGLE_ECDH_USE), provide the EC key via a callback that was provided with insufficient information (SSL{_CTX,}_set_tmp_ecdh_cb()) or enable automatic selection and generation of EC keys via SSL{_CTX,}_set_ecdh_auto(). This complexity leads to problems (like ECDHE not being enabled) and potential weird configuration (like being able to do ECDHE without the ephemeral part...). We no longer support ECDH and ECDHE can be disabled by removing ECDHE ciphers from the cipher list. As such, permanently enable automatic EC curve selection and generation, effectively disabling all of the configuration knobs. The only exception is the SSL{_CTX,}_set_tmp_ecdh() functions, which retain part of their previous behaviour by configuring the curve of the given EC key as the only curve being enabled. Everything else becomes a no-op. ok beck@ doug@
2017-05-07Move state from ssl->internal to the handshake structure.Bob Beck
while we are at it, convert SSLerror to use a function internally, so that we may later allocate the handshake structure and check for it ok jsing@
2017-05-06Bring in an SSL_HANDSHAKE structure and commence the great shovellingBob Beck
ok jsing@, gcc@, regress@
2017-04-29Fix a bug caused by the return value being set early to signal successfulJoel Sing
DTLS cookie validation. This can mask a later failure and result in a positive return value being returned from ssl3_get_client_hello(), when it should return a negative value to propagate the error. Ironically this was introduced in OpenSSL 2e9802b7a7b with the commit message "Fix DTLS cookie management bugs". Fix based on OpenSSL. Issue reported by Nicolas Bouliane <nbouliane at jive dot com>. ok beck@
2017-04-14Use freezero(3) when cleaning up session tickets - not only does it requireJoel Sing
less code, but there is also a potential performance gain since they can be larger allocations.
2017-04-14Use freezero(3) to clean up the X25519 keys - simpler, cleaner code.Joel Sing