diff --git a/daemon/bin/dbus/configurationmanager-introspec.xml b/daemon/bin/dbus/configurationmanager-introspec.xml
index c420070439c11846a4a1a7ea0f4aba4b14af12bf..7b65a53e9d9861335e68d9c99ed9df0fd832b63c 100644
--- a/daemon/bin/dbus/configurationmanager-introspec.xml
+++ b/daemon/bin/dbus/configurationmanager-introspec.xml
@@ -630,6 +630,40 @@
            </arg>
        </method>
 
+       <method name="validateCertificate" tp:name-for-bindings="validateCertificate">
+           <arg type="s" name="accountId" direction="in"></arg>
+           <arg type="s" name="certificatePath" direction="in">
+              <tp:docstring>
+               <p>A certificate path</p>
+              </tp:docstring>
+           </arg>
+           <arg type="s" name="privateKeyPath" direction="in">
+              <tp:docstring>
+               <p>An optional path a the private key for the certificate</p>
+              </tp:docstring>
+           </arg>
+           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+           <arg type="a{ss}" name="details" direction="out">
+              <tp:docstring>
+               <p>A key-value list of all certificate validation</p>
+              </tp:docstring>
+           </arg>
+       </method>
+
+       <method name="getCertificateDetails" tp:name-for-bindings="getCertificateDetails">
+           <arg type="s" name="certificatePath" direction="in">
+              <tp:docstring>
+               <p>A certificate path</p>
+              </tp:docstring>
+           </arg>
+           <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+           <arg type="a{ss}" name="details" direction="out">
+              <tp:docstring>
+               <p>A key-value list of all certificate details</p>
+              </tp:docstring>
+           </arg>
+       </method>
+
        <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName">
            <arg type="s" name="interface" direction="in">
            </arg>
diff --git a/daemon/bin/dbus/dbusconfigurationmanager.cpp b/daemon/bin/dbus/dbusconfigurationmanager.cpp
index cf52399c4402c2ea5e4eef2607dea54020ff4dae..3e4fac6ddf9fe1181779c6c8fa3be21276311308 100644
--- a/daemon/bin/dbus/dbusconfigurationmanager.cpp
+++ b/daemon/bin/dbus/dbusconfigurationmanager.cpp
@@ -302,6 +302,16 @@ std::map<std::string, std::string> DBusConfigurationManager::getTlsSettings()
     return sflph_config_get_tls_settings();
 }
 
+std::map<std::string, std::string> DBusConfigurationManager::validateCertificate(const std::string& accountId, const std::string& certificate, const std::string& privateKey)
+{
+   return sflph_config_validate_certificate(accountId, certificate, privateKey);
+}
+
+std::map<std::string, std::string> DBusConfigurationManager::getCertificateDetails(const std::string& certificate)
+{
+    return sflph_config_get_certificate_details(certificate);
+}
+
 void DBusConfigurationManager::setTlsSettings(const std::map< std::string, std::string >& details)
 {
     sflph_config_set_tls_settings(details);
diff --git a/daemon/bin/dbus/dbusconfigurationmanager.h b/daemon/bin/dbus/dbusconfigurationmanager.h
index dfea930cdfa9cca2a465e9c35cfb2c7f65696e69..eec0ef8db83988fe58745b8afa2add52bf850995 100644
--- a/daemon/bin/dbus/dbusconfigurationmanager.h
+++ b/daemon/bin/dbus/dbusconfigurationmanager.h
@@ -134,6 +134,10 @@ class DBusConfigurationManager :
         bool checkForPrivateKey(const std::string& pemPath);
         bool checkCertificateValidity(const std::string& caPath, const std::string& pemPath);
         bool checkHostnameCertificate(const  std::string& host, const std::string& port);
+        std::map<std::string, std::string> validateCertificate(const std::string& accountId,
+            const std::string& certificate, const std::string& privateKey);
+        std::map<std::string, std::string> getCertificateDetails(const std::string& certificate);
+
 };
 
 #endif // __SFL_DBUSCONFIGURATIONMANAGER_H__
diff --git a/daemon/src/client/configurationmanager.cpp b/daemon/src/client/configurationmanager.cpp
index ef53e412f01c0d79828534297f8a3eb3195fa21e..9b11dd6b728560be5a0c898a441c004c2ce5ef10 100644
--- a/daemon/src/client/configurationmanager.cpp
+++ b/daemon/src/client/configurationmanager.cpp
@@ -38,6 +38,7 @@
 #include "account_schema.h"
 #include "manager.h"
 #if HAVE_TLS
+#include "sip/tlsvalidator.h"
 #include "sip/tlsvalidation.h"
 #endif
 #include "logger.h"
@@ -139,6 +140,29 @@ void ConfigurationManager::setTlsSettings(const std::map<std::string, std::strin
     accountsChanged();
 }
 
+std::map<std::string, std::string> ConfigurationManager::validateCertificate(const std::string& accountId,
+                                                                             const std::string& certificate,
+                                                                             const std::string& privateKey)
+{
+#if HAVE_TLS
+    TlsValidator validator(certificate,privateKey);
+    return validator.getSerializedChecks();
+#else
+    SFL_WARN("TLS not supported");
+    return std::map<std::string, std::string>();
+#endif
+}
+
+std::map<std::string, std::string> ConfigurationManager::getCertificateDetails(const std::string& certificate)
+{
+#if HAVE_TLS
+    TlsValidator validator(certificate,"");
+    return validator.getSerializedDetails();
+#else
+    SFL_WARN("TLS not supported");
+    return std::map<std::string, std::string>();
+#endif
+}
 
 void ConfigurationManager::setAccountDetails(const std::string& accountID, const std::map<std::string, std::string>& details)
 {
diff --git a/daemon/src/client/configurationmanager.h b/daemon/src/client/configurationmanager.h
index 481f47a649086117d07d054b4942493d117fe793..fe27c6946f1770c9af48bcf0ecddcfa4cb057906 100644
--- a/daemon/src/client/configurationmanager.h
+++ b/daemon/src/client/configurationmanager.h
@@ -143,6 +143,10 @@ class ConfigurationManager
                                       const std::string& pemPath);
         bool checkHostnameCertificate(const std::string& host,
                                       const std::string& port);
+        std::map<std::string, std::string> validateCertificate(const std::string& accountId,
+            const std::string& certificate, const std::string& privateKey);
+        std::map<std::string, std::string> getCertificateDetails(const std::string& certificate);
+
 
     // Signals
     public:
diff --git a/daemon/src/sflphone.h b/daemon/src/sflphone.h
index d3f544a798f6aab1d9dbbcbd7d3e513cb220ffae..c35ffe695270f9916d8755a4fc55e031ff2dca8b 100644
--- a/daemon/src/sflphone.h
+++ b/daemon/src/sflphone.h
@@ -246,6 +246,9 @@ std::map<std::string, std::string> sflph_config_get_hook_settings(void);
 void sflph_config_set_hook_settings(const std::map<std::string, std::string>& settings);
 std::vector<std::map<std::string, std::string>> sflph_config_get_history(void);
 std::map<std::string, std::string> sflph_config_get_tls_settings();
+std::map<std::string, std::string> sflph_config_validate_certificate(const std::string& accountId,
+    const std::string& certificate, const std::string& private_key);
+std::map<std::string, std::string> sflph_config_get_certificate_details(const std::string& certificate);
 void sflph_config_set_tls_settings(const std::map< std::string, std::string >& settings);
 std::map<std::string, std::string> sflph_config_get_ip2ip_details(void);
 std::vector<std::map<std::string, std::string>> sflph_config_get_credentials(const std::string& account_id);
diff --git a/daemon/src/sflphone_api.cpp b/daemon/src/sflphone_api.cpp
index e8e8beadefb1682b8b3ffcce11f44f7f7b68cf1c..2f72699ca7326c97708f33f0cc5453dd69a133bb 100644
--- a/daemon/src/sflphone_api.cpp
+++ b/daemon/src/sflphone_api.cpp
@@ -680,6 +680,16 @@ bool sflph_config_check_hostname_certificate(const std::string& host, const std:
     return getConfigurationManager()->checkHostnameCertificate(host, port);
 }
 
+std::map<std::string, std::string> sflph_config_validate_certificate(const std::string& accountId, const std::string& certificate, const std::string& private_key)
+{
+    return getConfigurationManager()->validateCertificate(accountId,certificate,private_key);
+}
+
+std::map<std::string, std::string> sflph_config_get_certificate_details(const std::string& certificate)
+{
+    return getConfigurationManager()->getCertificateDetails(certificate);
+}
+
 void sflph_pres_publish(const std::string& account_id, int status, const std::string& note)
 {
     getPresenceManager()->publish(account_id, status, note);
diff --git a/daemon/src/sip/Makefile.am b/daemon/src/sip/Makefile.am
index ff06b1b040e28a5bdb5888aa36adcfb17e64a5b8..bdc2e3171db89743027e421197e15e3a0a13770b 100644
--- a/daemon/src/sip/Makefile.am
+++ b/daemon/src/sip/Makefile.am
@@ -21,7 +21,9 @@ libsiplink_la_SOURCES = \
 
 if BUILD_TLS
 libsiplink_la_SOURCES += tlsvalidation.c \
-                         tlsvalidation.h
+                         tlsvalidation.h \
+                         tlsvalidator.cpp \
+                         tlsvalidator.h
 endif
 
 libsiplink_la_SOURCES+=sippresence.cpp \