18#include <openssl/opensslv.h>
20using namespace boost::asio;
21using namespace boost::asio::ssl;
22using namespace boost::system;
30TlsContext::TlsContext(
TlsRole role)
32 context_(context::method::tls)
35 setCertRequired(
true);
38boost::asio::ssl::context&
39TlsContext::getContext() {
44TlsContext::getNativeContext() {
45 return (context_.native_handle());
49TlsContext::setCertRequired(
bool cert_required) {
50 if (!cert_required && (getRole() == TlsRole::CLIENT)) {
52 "'cert-required' parameter must be true for a TLS client");
54 cert_required_ = cert_required;
56 int mode = verify_peer | verify_fail_if_no_peer_cert;
57 if (!cert_required_) {
60 context_.set_verify_mode(mode, ec);
67TlsContext::getCertRequired()
const {
68 return (cert_required_);
72TlsContext::loadCaFile(
const std::string& ca_file) {
74 context_.load_verify_file(ca_file, ec);
81TlsContext::loadCaPath(
const std::string& ca_path) {
83 context_.add_verify_path(ca_path, ec);
90TlsContext::loadCertFile(
const std::string& cert_file) {
92 context_.use_certificate_chain_file(cert_file, ec);
99TlsContext::loadKeyFile(
const std::string& key_file) {
101 context_.use_private_key_file(key_file, context::file_format::pem, ec);
108TlsContext::getErrMsg(error_code ec) {
109 std::string msg = ec.message();
110#ifdef ERR_SYSTEM_ERROR
117 unsigned long err =
static_cast<unsigned long>(ec.value());
118 if ((msg ==
"asio.ssl error") && (ERR_SYSTEM_ERROR(err))) {
121 if (strerror_r(err & ERR_SYSTEM_MASK, &buf[0],
sizeof(buf)) == 0) {
125 msg = strerror_r(err & ERR_SYSTEM_MASK, &buf[0],
sizeof(buf));
A generic exception that is thrown if a parameter given to a method is considered invalid in that con...
This exception is raised when a general error that was not specifically caught is thrown by the under...
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
TlsRole
Client and server roles.
Defines the logger used by the top-level component of kea-lfc.