SSL_OP_SINGLE_ECDH_USE;
SSL_CTX_set_options(ctx.get(), sslOptions);
- libssl_set_min_tls_version(ctx, minTLSVersion);
+ if (!libssl_set_min_tls_version(ctx, minTLSVersion)) {
+ throw std::runtime_error("Failed to set the minimum version to '" + libssl_tls_version_to_string(minTLSVersion) + "' for DoH listener");
+ }
#ifdef SSL_CTX_set_ecdh_auto
SSL_CTX_set_ecdh_auto(ctx.get(), 1);
throw std::runtime_error("Unknown TLS version '" + str);
}
+const std::string& libssl_tls_version_to_string(LibsslTLSVersion version)
+{
+ static const std::map<LibsslTLSVersion, std::string> versions = {
+ { LibsslTLSVersion::TLS10, "tls1.0" },
+ { LibsslTLSVersion::TLS11, "tls1.1" },
+ { LibsslTLSVersion::TLS12, "tls1.2" },
+ { LibsslTLSVersion::TLS13, "tls1.3" }
+ };
+
+ const auto& it = versions.find(version);
+ if (it == versions.end()) {
+ throw std::runtime_error("Unknown TLS version (" + std::to_string((int)version) + ")");
+ }
+ return it->second;
+}
+
bool libssl_set_min_tls_version(std::unique_ptr<SSL_CTX, void(*)(SSL_CTX*)>& ctx, LibsslTLSVersion version)
{
#if (OPENSSL_VERSION_NUMBER >= 0x1010000fL && !defined LIBRESSL_VERSION_NUMBER)
vers = TLS1_2_VERSION;
break;
case LibsslTLSVersion::TLS13:
+#ifdef TLS1_3_VERSION
vers = TLS1_3_VERSION;
+#else
+ return false;
+#endif /* TLS1_3_VERSION */
break;
default:
return false;
SSL_CTX_set_tlsext_ticket_key_cb(d_tlsCtx.get(), &OpenSSLTLSIOCtx::ticketKeyCb);
SSL_CTX_set_ex_data(d_tlsCtx.get(), s_ticketsKeyIndex, this);
SSL_CTX_set_options(d_tlsCtx.get(), sslOptions);
- libssl_set_min_tls_version(d_tlsCtx, fe.d_minTLSVersion);
+ if (!libssl_set_min_tls_version(d_tlsCtx, fe.d_minTLSVersion)) {
+ throw std::runtime_error("Failed to set the minimum version to '" + libssl_tls_version_to_string(fe.d_minTLSVersion) + "' for ths TLS context on " + fe.d_addr.toStringWithPort());
+ }
+
#if defined(SSL_CTX_set_ecdh_auto)
SSL_CTX_set_ecdh_auto(d_tlsCtx.get(), 1);
#endif
#endif
LibsslTLSVersion libssl_tls_version_from_string(const std::string& str);
+const std::string& libssl_tls_version_to_string(LibsslTLSVersion version);
bool libssl_set_min_tls_version(std::unique_ptr<SSL_CTX, void(*)(SSL_CTX*)>& ctx, LibsslTLSVersion version);
#endif /* HAVE_LIBSSL */