Add support for SSL_CTX_set_post_handshake_auth()
authorMatt Caswell <matt@openssl.org>
Mon, 13 Aug 2018 14:53:42 +0000 (15:53 +0100)
committerMatt Caswell <matt@openssl.org>
Mon, 20 Aug 2018 14:14:01 +0000 (15:14 +0100)
We already have SSL_set_post_handshake_auth(). This just adds the SSL_CTX
equivalent.

Reviewed-by: Tim Hudson <tjh@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6938)

doc/man3/SSL_CTX_set_verify.pod
include/openssl/ssl.h
ssl/ssl_lib.c
ssl/ssl_locl.h
test/sslapitest.c
util/libssl.num

index 173f006eb65a4b0c2f3deb32930bcce9ba1c2598..c192f9af6fa2bd88fa8a08c312b1e0e45ff7dc42 100644 (file)
@@ -7,7 +7,8 @@ SSL_CTX_set_verify, SSL_set_verify,
 SSL_CTX_set_verify_depth, SSL_set_verify_depth,
 SSL_verify_cb,
 SSL_verify_client_post_handshake,
-SSL_set_post_handshake_auth
+SSL_set_post_handshake_auth,
+SSL_CTX_set_post_handshake_auth
 - set peer certificate verification parameters
 
 =head1 SYNOPSIS
@@ -24,6 +25,7 @@ SSL_set_post_handshake_auth
  void SSL_set_verify_depth(SSL *ssl, int depth);
 
  int SSL_verify_client_post_handshake(SSL *ssl);
+ void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val);
  void SSL_set_post_handshake_auth(SSL *ssl, int val);
 
 =head1 DESCRIPTION
@@ -48,12 +50,12 @@ verification that shall be allowed for B<ctx>.
 SSL_set_verify_depth() sets the maximum B<depth> for the certificate chain
 verification that shall be allowed for B<ssl>.
 
-SSL_set_post_handshake_auth() enables the Post-Handshake Authentication
-extension to be added to the ClientHello such that post-handshake authentication
-can be requested by the server. If B<val> is 0 then the extension is not sent,
-otherwise it is. By default the extension is not sent. A certificate callback
-will need to be set via SSL_CTX_set_client_cert_cb() if no certificate is
-provided at initialization.
+SSL_CTX_set_post_handshake_auth() and SSL_set_post_handshake_auth() enable the
+Post-Handshake Authentication extension to be added to the ClientHello such that
+post-handshake authentication can be requested by the server. If B<val> is 0
+then the extension is not sent, otherwise it is. By default the extension is not
+sent. A certificate callback will need to be set via
+SSL_CTX_set_client_cert_cb() if no certificate is provided at initialization.
 
 SSL_verify_client_post_handshake() causes a CertificateRequest message to be
 sent by a server on the given B<ssl> connection. The SSL_VERIFY_PEER flag must
index b61119cc18dbf6db0b6b4515930df8e0f3156f69..eb689c1c36d35dc5c4caad61e95e747022e5939a 100644 (file)
@@ -1898,6 +1898,7 @@ int SSL_renegotiate_abbreviated(SSL *s);
 __owur int SSL_renegotiate_pending(SSL *s);
 int SSL_shutdown(SSL *s);
 __owur int SSL_verify_client_post_handshake(SSL *s);
+void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val);
 void SSL_set_post_handshake_auth(SSL *s, int val);
 
 __owur const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx);
index 89570fbe3adf21506b030961593c9a2794588c28..7e8093bcfd4ff8812c82e621691629c11f2773c5 100644 (file)
@@ -702,6 +702,7 @@ SSL *SSL_new(SSL_CTX *ctx)
     s->max_early_data = ctx->max_early_data;
     s->recv_max_early_data = ctx->recv_max_early_data;
     s->num_tickets = ctx->num_tickets;
+    s->pha_enabled = ctx->pha_enabled;
 
     /* Shallow copy of the ciphersuites stack */
     s->tls13_ciphersuites = sk_SSL_CIPHER_dup(ctx->tls13_ciphersuites);
@@ -5455,6 +5456,11 @@ int SSL_stateless(SSL *s)
     return -1;
 }
 
+void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val)
+{
+    ctx->pha_enabled = val;
+}
+
 void SSL_set_post_handshake_auth(SSL *ssl, int val)
 {
     ssl->pha_enabled = val;
index 0d981104800a57105935c1adf5a4cae591fd0607..362ae1cbe5af964e61f7622df949887f6787d277 100644 (file)
@@ -1063,6 +1063,9 @@ struct ssl_ctx_st {
     /* Callback to determine if early_data is acceptable or not */
     SSL_allow_early_data_cb_fn allow_early_data_cb;
     void *allow_early_data_cb_data;
+
+    /* Do we advertise Post-handshake auth support? */
+    int pha_enabled;
 };
 
 struct ssl_st {
index 81761f2f654e3163585520789ac28ca1e00f654c..d21b39d84c94afe030116331f11d62c41f65e93e 100644 (file)
@@ -4331,13 +4331,12 @@ static int test_pha_key_update(void)
         || !TEST_true(SSL_CTX_set_max_proto_version(cctx, TLS1_3_VERSION)))
         goto end;
 
+    SSL_CTX_set_post_handshake_auth(cctx, 1);
 
     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
                                       NULL, NULL)))
         goto end;
 
-    SSL_set_post_handshake_auth(clientssl, 1);
-
     if (!TEST_true(create_ssl_connection(serverssl, clientssl,
                                          SSL_ERROR_NONE)))
         goto end;
index 521637f098428d5584884e2ffa340a1f111bcc9b..3c31d7cc9582416ae3a06d5e99524b1706903aaa 100644 (file)
@@ -496,3 +496,4 @@ SSL_set_recv_max_early_data             496 1_1_1   EXIST::FUNCTION:
 SSL_get_recv_max_early_data             497    1_1_1   EXIST::FUNCTION:
 SSL_CTX_get_recv_max_early_data         498    1_1_1   EXIST::FUNCTION:
 SSL_CTX_set_recv_max_early_data         499    1_1_1   EXIST::FUNCTION:
+SSL_CTX_set_post_handshake_auth         500    1_1_1   EXIST::FUNCTION: