20#ifndef RIPPLE_NET_HTTPCLIENTSSLCONTEXT_H_INCLUDED
21#define RIPPLE_NET_HTTPCLIENTSSLCONTEXT_H_INCLUDED
23#include <xrpld/core/Config.h>
24#include <xrpld/net/RegisterSSLCerts.h>
26#include <xrpl/basics/Log.h>
27#include <xrpl/basics/contract.h>
29#include <boost/asio.hpp>
30#include <boost/asio/ip/tcp.hpp>
31#include <boost/asio/ssl.hpp>
32#include <boost/format.hpp>
42 boost::asio::ssl::context_base::method method =
43 boost::asio::ssl::context::sslv23)
46 boost::system::error_code ec;
53 Throw<std::runtime_error>(boost::str(
54 boost::format(
"Failed to set_default_verify_paths: %s") %
67 Throw<std::runtime_error>(boost::str(
68 boost::format(
"Failed to add verify path: %s") %
73 boost::asio::ssl::context&
102 boost::asio::ssl::stream<boost::asio::ip::tcp::socket>>::
106 boost::asio::ssl::stream<boost::asio::ip::tcp::socket&>>::
108 boost::system::error_code
111 boost::system::error_code ec;
112 if (!SSL_set_tlsext_host_name(strm.native_handle(), host.
c_str()))
115 static_cast<int>(::ERR_get_error()),
116 boost::asio::error::get_ssl_category());
120 strm.set_verify_mode(boost::asio::ssl::verify_none, ec);
130 boost::asio::ssl::stream<boost::asio::ip::tcp::socket>>::
134 boost::asio::ssl::stream<boost::asio::ip::tcp::socket&>>::
143 boost::system::error_code
146 boost::system::error_code ec;
150 strm.set_verify_mode(boost::asio::ssl::verify_peer, ec);
153 strm.set_verify_callback(
157 std::placeholders::_1,
158 std::placeholders::_2,
180 boost::asio::ssl::verify_context& ctx,
183 if (boost::asio::ssl::rfc2818_verification(domain)(preverified, ctx))
186 JLOG(j.
warn()) <<
"Outbound SSL connection to " << domain
187 <<
" fails certificate verification";
A generic endpoint for log messages.
std::string SSL_VERIFY_FILE
std::string SSL_VERIFY_DIR
static bool rfc2818_verify(std::string const &domain, bool preverified, boost::asio::ssl::verify_context &ctx, beast::Journal j)
callback invoked for name verification - just passes through to the asio rfc2818 implementation.
boost::system::error_code preConnectVerify(T &strm, std::string const &host)
invoked before connect/async_connect on an ssl stream to setup name verification.
boost::asio::ssl::context ssl_context_
boost::system::error_code postConnectVerify(T &strm, std::string const &host)
invoked after connect/async_connect but before sending data on an ssl stream - to setup name verifica...
boost::asio::ssl::context & context()
HTTPClientSSLContext(Config const &config, beast::Journal j, boost::asio::ssl::context_base::method method=boost::asio::ssl::context::sslv23)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
void registerSSLCerts(boost::asio::ssl::context &ctx, boost::system::error_code &ec, beast::Journal j)
Register default SSL certificates.