diff --git a/http/app.hpp b/http/app.hpp
index c1472e5..59aca39 100644
--- a/http/app.hpp
+++ b/http/app.hpp
@@ -151,35 +151,6 @@
     }
 
 #ifdef BMCWEB_ENABLE_SSL
-    App& sslFile(const std::string& crtFilename, const std::string& keyFilename)
-    {
-        sslContext = std::make_shared<ssl_context_t>(
-            boost::asio::ssl::context::tls_server);
-        sslContext->set_verify_mode(boost::asio::ssl::verify_peer);
-        sslContext->use_certificate_file(crtFilename, ssl_context_t::pem);
-        sslContext->use_private_key_file(keyFilename, ssl_context_t::pem);
-        sslContext->set_options(boost::asio::ssl::context::default_workarounds |
-                                boost::asio::ssl::context::no_sslv2 |
-                                boost::asio::ssl::context::no_sslv3 |
-                                boost::asio::ssl::context::no_tlsv1 |
-                                boost::asio::ssl::context::no_tlsv1_1);
-        return *this;
-    }
-
-    App& sslFile(const std::string& pemFilename)
-    {
-        sslContext = std::make_shared<ssl_context_t>(
-            boost::asio::ssl::context::tls_server);
-        sslContext->set_verify_mode(boost::asio::ssl::verify_peer);
-        sslContext->load_verify_file(pemFilename);
-        sslContext->set_options(boost::asio::ssl::context::default_workarounds |
-                                boost::asio::ssl::context::no_sslv2 |
-                                boost::asio::ssl::context::no_sslv3 |
-                                boost::asio::ssl::context::no_tlsv1 |
-                                boost::asio::ssl::context::no_tlsv1_1);
-        return *this;
-    }
-
     App& ssl(std::shared_ptr<boost::asio::ssl::context>&& ctx)
     {
         sslContext = std::move(ctx);
@@ -191,18 +162,6 @@
     std::shared_ptr<ssl_context_t> sslContext = nullptr;
 
 #else
-    template <typename T, typename... Remain>
-    App& ssl_file(T&&, Remain&&...)
-    {
-        // We can't call .ssl() member function unless BMCWEB_ENABLE_SSL is
-        // defined.
-        static_assert(
-            // make static_assert dependent to T; always false
-            std::is_base_of<T, void>::value,
-            "Define BMCWEB_ENABLE_SSL to enable ssl support.");
-        return *this;
-    }
-
     template <typename T>
     App& ssl(T&&)
     {
