Go to file
Todd Short 9d75dce3e1 Add TLSv1.3 post-handshake authentication (PHA)
Add SSL_verify_client_post_handshake() for servers to initiate PHA

Add SSL_force_post_handshake_auth() for clients that don't have certificates
initially configured, but use a certificate callback.

Update SSL_CTX_set_verify()/SSL_set_verify() mode:

* Add SSL_VERIFY_POST_HANDSHAKE to postpone client authentication until after
the initial handshake.

* Update SSL_VERIFY_CLIENT_ONCE now only sends out one CertRequest regardless
of when the certificate authentication takes place; either initial handshake,
re-negotiation, or post-handshake authentication.

Add 'RequestPostHandshake' and 'RequirePostHandshake' SSL_CONF options that
add the SSL_VERIFY_POST_HANDSHAKE to the 'Request' and 'Require' options

Add support to s_client:
* Enabled automatically when cert is configured
* Can be forced enabled via -force_pha

Add support to s_server:
* Use 'c' to invoke PHA in s_server
* Remove some dead code

Update documentation

Update unit tests:
* Illegal use of PHA extension
* TLSv1.3 certificate tests

DTLS and TLS behave ever-so-slightly differently. So, when DTLS1.3 is
implemented, it's PHA support state machine may need to be different.
Add a TODO and a #error

Update handshake context to deal with PHA.

The handshake context for TLSv1.3 post-handshake auth is up through the
ClientFinish message, plus the CertificateRequest message. Subsequent
Certificate, CertificateVerify, and Finish messages are based on this
handshake context (not the Certificate message per se, but it's included
after the hash). KeyUpdate, NewSessionTicket, and prior Certificate
Request messages are not included in post-handshake authentication.

After the ClientFinished message is processed, save off the digest state
for future post-handshake authentication. When post-handshake auth occurs,
copy over the saved handshake context into the "main" handshake digest.
This effectively discards the any KeyUpdate or NewSessionTicket messages
and any prior post-handshake authentication.

This, of course, assumes that the ID-22 did not mean to include any
previous post-handshake authentication into the new handshake transcript.
This is implied by section 4.4.1 that lists messages only up to the
first ClientFinished.

Reviewed-by: Ben Kaduk <kaduk@mit.edu>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/4964)
2018-02-01 17:07:56 +00:00
.github
apps Add TLSv1.3 post-handshake authentication (PHA) 2018-02-01 17:07:56 +00:00
boringssl@2070f8ad91
Configurations Apps: divide the modules in direct command modules, support library and init 2018-01-31 23:45:12 +01:00
crypto Add TLSv1.3 post-handshake authentication (PHA) 2018-02-01 17:07:56 +00:00
demos Add "friendly name" extractor 2017-11-30 14:53:46 -05:00
doc Add TLSv1.3 post-handshake authentication (PHA) 2018-02-01 17:07:56 +00:00
engines Processing GNU-style "make variables" - separate CPP flags from C flags 2018-01-28 07:26:10 +01:00
external/perl
fuzz SHA512/224 and SHA512/256 2018-01-24 07:09:46 +10:00
include Add TLSv1.3 post-handshake authentication (PHA) 2018-02-01 17:07:56 +00:00
krb5@b9ad6c4950
ms Many spelling fixes/typo's corrected. 2017-11-11 19:03:10 -05:00
os-dep
pyca-cryptography@c1f8e46033 Update pyca-cryptography to latest commit 2017-08-11 11:16:44 +10:00
ssl Add TLSv1.3 post-handshake authentication (PHA) 2018-02-01 17:07:56 +00:00
test Add TLSv1.3 post-handshake authentication (PHA) 2018-02-01 17:07:56 +00:00
tools
util Add TLSv1.3 post-handshake authentication (PHA) 2018-02-01 17:07:56 +00:00
VMS Simplify the handling of shared library version numbers 2017-07-26 22:53:03 +02:00
.gitattributes
.gitignore Remove test-runs dir, adjust .gitignore 2017-12-15 19:27:42 +01:00
.gitmodules
.travis-apt-pin.preferences Fix travis clang-3.9 builds 2017-06-23 17:57:02 +01:00
.travis-create-release.sh
.travis.yml Make Travis and Appveyor display the configuration data dump 2018-01-29 21:56:48 +01:00
ACKNOWLEDGEMENTS
appveyor.yml Make Travis and Appveyor display the configuration data dump 2018-01-29 21:56:48 +01:00
AUTHORS
build.info VMS build.info: uppercase args to perl modules must be quoted 2017-12-18 07:49:53 +01:00
CHANGES Document the use of configdata.pm as a script 2018-01-29 21:56:48 +01:00
config Make sure ./config passes options to ./Configure correctly 2017-12-08 00:36:21 +01:00
config.com VMS config.com: better handling of arguments 2018-01-28 14:49:44 +01:00
Configure Configure: Fix configdata.pm shorthand for --dump, should be -d 2018-01-31 10:16:51 +10:00
CONTRIBUTING
e_os.h e_os.h: add prandom and hwrng to the list of random devices on s390x. 2017-10-22 22:56:18 +02:00
FAQ
INSTALL Configure: Fix configdata.pm shorthand for --dump, should be -d 2018-01-31 10:16:51 +10:00
LICENSE Update the license end year 2018-01-20 10:02:23 +01:00
NEWS Document the use of configdata.pm as a script 2018-01-29 21:56:48 +01:00
NOTES.DJGPP
NOTES.PERL
NOTES.UNIX
NOTES.VMS
NOTES.WIN Various doc fixes. 2017-07-26 23:09:40 -04:00
README Document the use of configdata.pm as a script 2018-01-29 21:56:48 +01:00
README.ECC
README.ENGINE
README.FIPS

 OpenSSL 1.1.1-dev

 Copyright (c) 1998-2016 The OpenSSL Project
 Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
 All rights reserved.

 DESCRIPTION
 -----------

 The OpenSSL Project is a collaborative effort to develop a robust,
 commercial-grade, fully featured, and Open Source toolkit implementing the
 Transport Layer Security (TLS) protocols (including SSLv3) as well as a
 full-strength general purpose cryptographic library.

 OpenSSL is descended from the SSLeay library developed by Eric A. Young
 and Tim J. Hudson.  The OpenSSL toolkit is licensed under a dual-license (the
 OpenSSL license plus the SSLeay license), which means that you are free to
 get and use it for commercial and non-commercial purposes as long as you
 fulfill the conditions of both licenses.

 OVERVIEW
 --------

 The OpenSSL toolkit includes:

 libssl (with platform specific naming):
     Provides the client and server-side implementations for SSLv3 and TLS.

 libcrypto (with platform specific naming):
     Provides general cryptographic and X.509 support needed by SSL/TLS but
     not logically part of it.

 openssl:
     A command line tool that can be used for:
        Creation of key parameters
        Creation of X.509 certificates, CSRs and CRLs
        Calculation of message digests
        Encryption and decryption
        SSL/TLS client and server tests
        Handling of S/MIME signed or encrypted mail
        And more...

 INSTALLATION
 ------------

 See the appropriate file:
        INSTALL         Linux, Unix, Windows, OpenVMS, ...
        NOTES.*         INSTALL addendums for different platforms

 SUPPORT
 -------

 See the OpenSSL website www.openssl.org for details on how to obtain
 commercial technical support. Free community support is available through the
 openssl-users email list (see
 https://www.openssl.org/community/mailinglists.html for further details).

 If you have any problems with OpenSSL then please take the following steps
 first:

    - Download the latest version from the repository
      to see if the problem has already been addressed
    - Configure with no-asm
    - Remove compiler optimization flags

 If you wish to report a bug then please include the following information
 and create an issue on GitHub:

    - OpenSSL version: output of 'openssl version -a'
    - Configuration data: output of 'perl configdata.pm --dump'
    - OS Name, Version, Hardware platform
    - Compiler Details (name, version)
    - Application Details (name, version)
    - Problem Description (steps that will reproduce the problem, if known)
    - Stack Traceback (if the application dumps core)

 Just because something doesn't work the way you expect does not mean it
 is necessarily a bug in OpenSSL. Use the openssl-users email list for this type
 of query.

 HOW TO CONTRIBUTE TO OpenSSL
 ----------------------------

 See CONTRIBUTING

 LEGALITIES
 ----------

 A number of nations restrict the use or export of cryptography. If you
 are potentially subject to such restrictions you should seek competent
 professional legal advice before attempting to develop or distribute
 cryptographic code.