20 #ifndef RIPPLE_NET_HTTPCLIENTSSLCONTEXT_H_INCLUDED
21 #define RIPPLE_NET_HTTPCLIENTSSLCONTEXT_H_INCLUDED
23 #include <ripple/basics/contract.h>
24 #include <ripple/basics/Log.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>
42 boost::asio::ssl::context_base::method method =
43 boost::asio::ssl::context::sslv23)
48 boost::system::error_code ec;
50 if (config.SSL_VERIFY_FILE.empty ())
54 if (ec && config.SSL_VERIFY_DIR.empty ())
55 Throw<std::runtime_error> (
56 boost::str (boost::format (
57 "Failed to set_default_verify_paths: %s") %
65 if (! config.SSL_VERIFY_DIR.empty ())
67 ssl_context_.add_verify_path (config.SSL_VERIFY_DIR, ec);
70 Throw<std::runtime_error> (
71 boost::str (boost::format (
72 "Failed to add verify path: %s") % ec.message ()));
104 boost::system::error_code
109 boost::system::error_code ec;
110 if (!SSL_set_tlsext_host_name(strm.native_handle(), host.
c_str()))
112 ec.assign(
static_cast<int>(
113 ::ERR_get_error()), boost::asio::error::get_ssl_category());
117 strm.set_verify_mode(boost::asio::ssl::verify_none, ec);
136 boost::system::error_code
141 boost::system::error_code ec;
145 strm.set_verify_mode (boost::asio::ssl::verify_peer, ec);
148 strm.set_verify_callback (
150 std::placeholders::_1, std::placeholders::_2,
j_), ec);
171 boost::asio::ssl::verify_context& ctx,
174 if (boost::asio::ssl::rfc2818_verification (domain) (preverified, ctx))
178 "Outbound SSL connection to " << domain <<
179 " fails certificate verification";