diff --git a/phosphor-ldap-config/ldap_config.cpp b/phosphor-ldap-config/ldap_config.cpp
index e7e191a..1620d1d 100644
--- a/phosphor-ldap-config/ldap_config.cpp
+++ b/phosphor-ldap-config/ldap_config.cpp
@@ -109,8 +109,8 @@
                const char* caCertFile, const char* certFile,
                ConfigIface::Type lDAPType, ConfigMgr& parent) :
     Ifaces(bus, path, true),
-    tlsCacertFile(caCertFile), tlsCertFile(certFile), configFilePath(filePath),
-    objectPath(path), bus(bus), parent(parent),
+    secureLDAP(false), tlsCacertFile(caCertFile), tlsCertFile(certFile),
+    configFilePath(filePath), objectPath(path), bus(bus), parent(parent),
     certificateInstalledSignal(
         bus, sdbusplus::bus::match::rules::interfacesAdded(certRootPath),
         std::bind(std::mem_fn(&Config::certificateInstalled), this,
@@ -706,6 +706,15 @@
                              std::ios::in | std::ios::binary);
             cereal::BinaryInputArchive iarchive(is);
             iarchive(*this);
+
+            if (isValidLDAPURI(lDAPServerURI(), LDAPscheme))
+            {
+                secureLDAP = false;
+            }
+            else if (isValidLDAPURI(lDAPServerURI(), LDAPSscheme))
+            {
+                secureLDAP = true;
+            }
             return true;
         }
         return false;
diff --git a/test/ldap_config_test.cpp b/test/ldap_config_test.cpp
index ab354ff..ddeaac6 100644
--- a/test/ldap_config_test.cpp
+++ b/test/ldap_config_test.cpp
@@ -109,6 +109,11 @@
         phosphor::ldap::ConfigMgr::createDefaultObjects();
     }
 
+    bool secureLDAP()
+    {
+        return ADConfigPtr->secureLDAP;
+    }
+
     friend class TestLDAPConfig;
 };
 
@@ -477,6 +482,38 @@
     delete managerPtr;
 }
 
+TEST_F(TestLDAPConfig, testsecureLDAPRestore)
+{
+    auto configFilePath = std::string(dir.c_str()) + "/" + ldapconfFile;
+    auto tlsCacertfile = std::string(dir.c_str()) + "/" + tlsCacertFile;
+    auto tlsCertfile = std::string(dir.c_str()) + "/" + tlsCertFile;
+    auto dbusPersistentFilePath = std::string(dir.c_str());
+
+    if (fs::exists(configFilePath))
+    {
+        fs::remove(configFilePath);
+    }
+    EXPECT_FALSE(fs::exists(configFilePath));
+    MockConfigMgr* managerPtr =
+        new MockConfigMgr(bus, LDAP_CONFIG_ROOT, configFilePath.c_str(),
+                          dbusPersistentFilePath.c_str(), tlsCacertfile.c_str(),
+                          tlsCertfile.c_str());
+    EXPECT_CALL(*managerPtr, stopService("nslcd.service")).Times(1);
+    EXPECT_CALL(*managerPtr, restartService("nslcd.service")).Times(1);
+    EXPECT_CALL(*managerPtr, restartService("nscd.service")).Times(1);
+    managerPtr->createConfig(
+        "ldaps://9.194.251.138/", "cn=Users,dc=com", "cn=Users,dc=corp",
+        "MyLdap12", ldap_base::Create::SearchScope::sub,
+        ldap_base::Create::Type::ActiveDirectory, "attr1", "attr2");
+    managerPtr->getADConfigPtr()->enabled(true);
+    EXPECT_TRUE(managerPtr->secureLDAP());
+    managerPtr->restore();
+    // Check secureLDAP variable value after restoring
+    EXPECT_TRUE(managerPtr->secureLDAP());
+
+    delete managerPtr;
+}
+
 TEST_F(TestLDAPConfig, filePermission)
 {
     auto configFilePath = std::string(dir.c_str()) + "/" + ldapconfFile;
