12 namespace SWC {
namespace Comm {
16 : nets_v4(), nets_v6(), subject_name(),
18 ? asio::ssl::context::tlsv13_client
19 : asio::ssl::context::tlsv13_server) {
22 std::string ciphers = settings.
get_str(
"swc.comm.ssl.ciphers",
"");
24 SSL_CTX_set_cipher_list(
25 ctx.native_handle(), ciphers.c_str());
27 const std::string pathbase(settings.
get_str(
"swc.cfg.path"));
29 if(settings.
has(
"swc.comm.ssl.ca"))
32 ctx.set_default_verify_paths();
34 ctx.add_certificate_authority(
35 asio::const_buffer(ca.data(), ca.length()));
41 asio::ssl::context::no_compression
42 | asio::ssl::context::no_sslv2
43 | asio::ssl::context::no_sslv3
44 | asio::ssl::context::no_tlsv1
45 | asio::ssl::context::no_tlsv1_1
46 | asio::ssl::context::no_tlsv1_2
50 ctx.set_verify_mode(asio::ssl::verify_peer);
54 asio::ssl::context::no_compression
55 | asio::ssl::context::no_sslv2
56 | asio::ssl::context::no_sslv3
57 | asio::ssl::context::no_tlsv1
58 | asio::ssl::context::no_tlsv1_1
59 | asio::ssl::context::no_tlsv1_2
60 | asio::ssl::context::single_dh_use
62 | SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
63 | SSL_OP_CIPHER_SERVER_PREFERENCE
69 asio::const_buffer(crt.data(), crt.length()), asio::ssl::context::pem);
73 ctx.use_rsa_private_key(
74 asio::const_buffer(key.data(), key.length()), asio::ssl::context::pem);
95 "Bad Network in swc.comm.ssl.secure.network error(%s)",
96 ec.message().c_str());
105 "Bad Network in swc.comm.ssl.secure.network error(%s)",
120 conn->set_verify(asio::ssl::host_name_verification(
subject_name));
127 asio::error_code& ec)
const {
129 conn->handshake(SocketSSL::client, ec);
134 std::string
filepath, std::string& to)
const {
141 std::ifstream istrm(
filepath, std::ios::binary | std::ios::ate);
142 if(istrm.is_open()) {
143 if(
size_t len = istrm.tellg()) {
146 istrm.read(to.data(), to.length());