diff --git a/core/include/internal/messaging.h b/core/include/internal/messaging.h index 6de8566..01a016d 100644 --- a/core/include/internal/messaging.h +++ b/core/include/internal/messaging.h @@ -28,6 +28,7 @@ #include "i_shell_cmd.h" #include "i_rest_api.h" #include "i_instance_awareness.h" +#include "i_details_resolver.h" #include "config.h" @@ -43,7 +44,8 @@ class Messaging Singleton::Consume, Singleton::Consume, Singleton::Consume, - Singleton::Consume + Singleton::Consume, + Singleton::Consume { public: Messaging(); diff --git a/components/include/i_details_resolver.h b/core/include/services_sdk/interfaces/i_details_resolver.h similarity index 100% rename from components/include/i_details_resolver.h rename to core/include/services_sdk/interfaces/i_details_resolver.h diff --git a/core/messaging/connection/connection.cc b/core/messaging/connection/connection.cc index ca4322c..5c87d50 100644 --- a/core/messaging/connection/connection.cc +++ b/core/messaging/connection/connection.cc @@ -262,6 +262,37 @@ public: } private: + string + getCertificateDirectory() + { + auto details_ssl_dir = Singleton::Consume::by()->getOpenSSLDir(); + + if (details_ssl_dir.ok()) { + return *details_ssl_dir; + } + + // Use detail_resolver to determine platform-specific certificate directory + auto maybe_platform = Singleton::Consume::by()->getPlatform(); + + if (!maybe_platform.ok()) { + dbgTrace(D_CONNECTION) + << "Failed to get platform for default certificate directory: " + << maybe_platform.getErr(); + return "/usr/lib/ssl/certs/"; // Fallback for failed platform detection + } + + auto platform = maybe_platform.unpack(); + if (platform == "alpine") { + return "/etc/ssl/certs/"; + } + + if (platform == "linux") { + return "/usr/lib/ssl/certs/"; + } + + return "/usr/lib/ssl/certs/"; + } + Maybe setSSLContext() { @@ -296,10 +327,11 @@ private: } dbgTrace(D_CONNECTION) << "Setting CA authentication"; - auto details_ssl_dir = Singleton::Consume::by()->getOpenSSLDir(); - auto openssl_dir = details_ssl_dir.ok() ? *details_ssl_dir : "/usr/lib/ssl/certs/"; - auto configured_ssl_dir = getConfigurationWithDefault(openssl_dir, "message", "Trusted CA directory"); - const char *ca_dir = configured_ssl_dir.empty() ? nullptr : configured_ssl_dir.c_str(); + + auto default_ssl_dir = getCertificateDirectory(); + auto configured_ssl_dir = + getProfileAgentSettingWithDefault(default_ssl_dir, "agent.config.message.capath"); + const char *ca_dir = configured_ssl_dir.empty() ? "/usr/lib/ssl/certs/" : configured_ssl_dir.c_str(); if (SSL_CTX_load_verify_locations(ssl_ctx.get(), ca_path.c_str(), ca_dir) != 1) { return genError("Failed to load certificate locations");