include/iocore/net/SSLMultiCertConfigLoader.h (64 lines of code) (raw):
/** @file
*
* A brief file description
*
* @section license License
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include "iocore/net/SSLTypes.h"
#include "tsutil/DbgCtl.h"
#include <openssl/ssl.h>
#include <swoc/Errata.h>
#include <string>
#include <set>
#include <vector>
struct SSLConfigParams;
struct SSLCertLookup;
struct SSLMultiCertConfigParams;
struct SSLLoadingContext;
/**
@brief Load SSL certificates from ssl_multicert.config and setup SSLCertLookup for SSLCertificateConfig
*/
class SSLMultiCertConfigLoader
{
public:
struct CertLoadData {
std::vector<std::string> cert_names_list, key_list, ca_list, ocsp_list;
std::vector<SSLCertContextType> cert_type_list;
};
SSLMultiCertConfigLoader(const SSLConfigParams *p) : _params(p) {}
virtual ~SSLMultiCertConfigLoader(){};
swoc::Errata load(SSLCertLookup *lookup);
virtual SSL_CTX *default_server_ssl_ctx();
virtual std::vector<SSLLoadingContext> init_server_ssl_ctx(CertLoadData const &data,
const SSLMultiCertConfigParams *sslMultCertSettings);
static bool load_certs(SSL_CTX *ctx, const std::vector<std::string> &cert_names_list,
const std::vector<std::string> &key_names_list, CertLoadData const &data, const SSLConfigParams *params,
const SSLMultiCertConfigParams *sslMultCertSettings);
bool load_certs_and_cross_reference_names(std::vector<X509 *> &cert_list, CertLoadData &data, const SSLConfigParams *params,
const SSLMultiCertConfigParams *sslMultCertSettings,
std::set<std::string> &common_names,
std::unordered_map<int, std::set<std::string>> &unique_names,
SSLCertContextType *certType);
static bool set_session_id_context(SSL_CTX *ctx, const SSLConfigParams *params,
const SSLMultiCertConfigParams *sslMultCertSettings);
static int check_server_cert_now(X509 *cert, const char *certname);
static void clear_pw_references(SSL_CTX *ssl_ctx);
bool update_ssl_ctx(const std::string &secret_name);
protected:
const SSLConfigParams *_params;
bool _store_single_ssl_ctx(SSLCertLookup *lookup, const shared_SSLMultiCertConfigParams &sslMultCertSettings, shared_SSL_CTX ctx,
SSLCertContextType ctx_type, std::set<std::string> &names);
private:
virtual const char *_debug_tag() const;
virtual const DbgCtl &_dbg_ctl() const;
virtual bool _store_ssl_ctx(SSLCertLookup *lookup, const shared_SSLMultiCertConfigParams &ssl_multi_cert_params);
bool _prep_ssl_ctx(const shared_SSLMultiCertConfigParams &sslMultCertSettings, SSLMultiCertConfigLoader::CertLoadData &data,
std::set<std::string> &common_names, std::unordered_map<int, std::set<std::string>> &unique_names);
virtual void _set_handshake_callbacks(SSL_CTX *ctx);
virtual bool _setup_session_cache(SSL_CTX *ctx);
virtual bool _setup_dialog(SSL_CTX *ctx, const SSLMultiCertConfigParams *sslMultCertSettings);
virtual bool _set_verify_path(SSL_CTX *ctx, const SSLMultiCertConfigParams *sslMultCertSettings);
virtual bool _setup_session_ticket(SSL_CTX *ctx, const SSLMultiCertConfigParams *sslMultCertSettings);
virtual bool _setup_client_cert_verification(SSL_CTX *ctx);
virtual bool _set_cipher_suites_for_legacy_versions(SSL_CTX *ctx);
virtual bool _set_cipher_suites(SSL_CTX *ctx);
virtual bool _set_curves(SSL_CTX *ctx);
virtual bool _set_info_callback(SSL_CTX *ctx);
virtual bool _set_npn_callback(SSL_CTX *ctx);
virtual bool _set_alpn_callback(SSL_CTX *ctx);
virtual bool _set_keylog_callback(SSL_CTX *ctx);
virtual bool _enable_ktls(SSL_CTX *ctx);
virtual bool _enable_early_data(SSL_CTX *ctx);
};