20 #ifndef RIPPLE_NET_HTTPCLIENTSSLCONTEXT_H_INCLUDED
21 #define RIPPLE_NET_HTTPCLIENTSSLCONTEXT_H_INCLUDED
23 #include <ripple/basics/Log.h>
24 #include <ripple/basics/contract.h>
25 #include <ripple/core/Config.h>
26 #include <ripple/net/RegisterSSLCerts.h>
27 #include <boost/asio.hpp>
28 #include <boost/asio/ip/tcp.hpp>
29 #include <boost/asio/ssl.hpp>
30 #include <boost/format.hpp>
40 boost::asio::ssl::context_base::method method =
41 boost::asio::ssl::context::sslv23)
44 boost::system::error_code ec;
46 if (config.SSL_VERIFY_FILE.empty())
50 if (ec && config.SSL_VERIFY_DIR.empty())
51 Throw<std::runtime_error>(boost::str(
52 boost::format(
"Failed to set_default_verify_paths: %s") %
60 if (!config.SSL_VERIFY_DIR.empty())
65 Throw<std::runtime_error>(boost::str(
66 boost::format(
"Failed to add verify path: %s") %
71 boost::asio::ssl::context&
100 boost::asio::ssl::stream<boost::asio::ip::tcp::socket>>::
104 boost::asio::ssl::stream<boost::asio::ip::tcp::socket&>>::
106 boost::system::error_code
109 boost::system::error_code ec;
110 if (!SSL_set_tlsext_host_name(strm.native_handle(), host.
c_str()))
113 static_cast<int>(::ERR_get_error()),
114 boost::asio::error::get_ssl_category());
118 strm.set_verify_mode(boost::asio::ssl::verify_none, ec);
128 boost::asio::ssl::stream<boost::asio::ip::tcp::socket>>::
132 boost::asio::ssl::stream<boost::asio::ip::tcp::socket&>>::
141 boost::system::error_code
144 boost::system::error_code ec;
148 strm.set_verify_mode(boost::asio::ssl::verify_peer, ec);
151 strm.set_verify_callback(
155 std::placeholders::_1,
156 std::placeholders::_2,
178 boost::asio::ssl::verify_context& ctx,
181 if (boost::asio::ssl::rfc2818_verification(domain)(preverified, ctx))
184 JLOG(j.
warn()) <<
"Outbound SSL connection to " << domain
185 <<
" fails certificate verification";