blob: c6a45c4b834985eb4ace95537210331620d0b8d8 [file] [log] [blame]
nharper6ebe83b2019-06-13 17:43:52 -07001// Copyright (c) 2019 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
QUICHE team5be974e2020-12-29 18:35:24 -05005#include "quic/core/crypto/tls_client_connection.h"
nharper6ebe83b2019-06-13 17:43:52 -07006
7namespace quic {
8
9TlsClientConnection::TlsClientConnection(SSL_CTX* ssl_ctx, Delegate* delegate)
10 : TlsConnection(ssl_ctx, delegate->ConnectionDelegate()),
11 delegate_(delegate) {}
12
13// static
nharperd25cd652020-05-20 13:10:26 -070014bssl::UniquePtr<SSL_CTX> TlsClientConnection::CreateSslCtx(
15 bool enable_early_data) {
nharpere62aab72020-11-04 16:32:09 -080016 bssl::UniquePtr<SSL_CTX> ssl_ctx =
17 TlsConnection::CreateSslCtx(SSL_VERIFY_PEER);
nharper6ebe83b2019-06-13 17:43:52 -070018 // Configure certificate verification.
nharper1473c092019-11-11 13:13:19 -080019 int reverify_on_resume_enabled = 1;
20 SSL_CTX_set_reverify_on_resume(ssl_ctx.get(), reverify_on_resume_enabled);
nharperdf7a77b2019-11-11 13:12:45 -080021
22 // Configure session caching.
23 SSL_CTX_set_session_cache_mode(
24 ssl_ctx.get(), SSL_SESS_CACHE_CLIENT | SSL_SESS_CACHE_NO_INTERNAL);
25 SSL_CTX_sess_set_new_cb(ssl_ctx.get(), NewSessionCallback);
nharperd25cd652020-05-20 13:10:26 -070026
27 SSL_CTX_set_early_data_enabled(ssl_ctx.get(), enable_early_data);
nharper6ebe83b2019-06-13 17:43:52 -070028 return ssl_ctx;
29}
30
31// static
nharperdf7a77b2019-11-11 13:12:45 -080032int TlsClientConnection::NewSessionCallback(SSL* ssl, SSL_SESSION* session) {
33 static_cast<TlsClientConnection*>(ConnectionFromSsl(ssl))
34 ->delegate_->InsertSession(bssl::UniquePtr<SSL_SESSION>(session));
35 return 1;
36}
37
nharper6ebe83b2019-06-13 17:43:52 -070038} // namespace quic