diff --git a/include/opendht/dht_proxy_server.h b/include/opendht/dht_proxy_server.h
index eebaa20f09632276660810ac74527458025f6204..8be073ac958af602eeb7f41acb050f40d9ae587e 100644
--- a/include/opendht/dht_proxy_server.h
+++ b/include/opendht/dht_proxy_server.h
@@ -86,9 +86,13 @@ public:
      * @note if the server fails to start (if port is already used or reserved),
      * it will fails silently
      */
-    DhtProxyServer(std::shared_ptr<DhtRunner> dht, in_port_t port = 8000,
-                   const std::string& pushServer = "",
-                   std::shared_ptr<dht::Logger> logger = {});
+    DhtProxyServer(
+#ifdef OPENDHT_PROXY_OPENSSL
+                   dht::crypto::Identity& identity,
+#endif
+                   std::shared_ptr<DhtRunner> dht, in_port_t port = 8000,
+                   const std::string& pushServer = "", std::shared_ptr<dht::Logger> logger = {});
+
     virtual ~DhtProxyServer();
 
     DhtProxyServer(const DhtProxyServer& other) = delete;
diff --git a/src/dht_proxy_server.cpp b/src/dht_proxy_server.cpp
index fbdf2dff0d4821ab2ee1deac8bf7101f6d301495..8db78805b8217880d6d428cb38fb9be690673e3f 100644
--- a/src/dht_proxy_server.cpp
+++ b/src/dht_proxy_server.cpp
@@ -46,9 +46,12 @@ constexpr char RESP_MSG_PUT_FAILED[] = "{\"err\":\"Put failed\"}";
 
 constexpr const std::chrono::minutes PRINT_STATS_PERIOD {2};
 
-DhtProxyServer::DhtProxyServer(std::shared_ptr<DhtRunner> dht, in_port_t port,
-                              const std::string& pushServer,
-                              std::shared_ptr<dht::Logger> logger
+DhtProxyServer::DhtProxyServer(
+#ifdef OPENDHT_PROXY_OPENSSL
+                               dht::crypto::Identity& identity,
+#endif
+                               std::shared_ptr<DhtRunner> dht, in_port_t port,
+                               const std::string& pushServer, std::shared_ptr<dht::Logger> logger
 ):
         dht_(dht), logger_(logger), lockListener_(std::make_shared<std::mutex>()),
         listeners_(std::make_shared<std::map<restinio::connection_id_t, http::ListenerSession>>()),
diff --git a/tests/dhtproxytester.cpp b/tests/dhtproxytester.cpp
index 565b4da51a0da301acb750f835f673ea696910aa..459cffc4ce6b08e4a4a5469c8402a86b15384eb1 100644
--- a/tests/dhtproxytester.cpp
+++ b/tests/dhtproxytester.cpp
@@ -40,8 +40,18 @@ DhtProxyTester::setUp() {
     nodeProxy = std::make_shared<dht::DhtRunner>();
     nodeProxy->run(0, /*identity*/{}, /*threaded*/true);
     nodeProxy->bootstrap(nodePeer.getBound());
-    serverProxy = std::unique_ptr<dht::DhtProxyServer>(new dht::DhtProxyServer(
-        nodeProxy, 8080, /*pushServer*/"127.0.0.1:8090", logger));
+
+#ifdef OPENDHT_PUSH_NOTIFICATIONS
+    auto ca_tmp = dht::crypto::generateEcIdentity("DHT Node CA");
+    serverIdentity = dht::crypto::generateIdentity("DHT Node", ca_tmp);
+#endif
+
+    serverProxy = std::unique_ptr<dht::DhtProxyServer>(
+        new dht::DhtProxyServer(
+#ifdef OPENDHT_PUSH_NOTIFICATIONS
+            serverIdentity,
+#endif
+            nodeProxy, 8080, /*pushServer*/"127.0.0.1:8090", logger));
 
     clientConfig.dht_config.node_config.maintain_storage = false;
     clientConfig.threaded = true;
diff --git a/tests/dhtproxytester.h b/tests/dhtproxytester.h
index 691b9450a13c9a155166157a894ce04a68a7de18..a5078b7eae1db122449084a634446e15b9f68753 100644
--- a/tests/dhtproxytester.h
+++ b/tests/dhtproxytester.h
@@ -66,6 +66,10 @@ class DhtProxyTester : public CppUnit::TestFixture {
 
     std::shared_ptr<dht::DhtRunner> nodeClient;
     std::shared_ptr<dht::DhtRunner> nodeProxy;
+
+#ifdef OPENDHT_PUSH_NOTIFICATIONS
+    dht::crypto::Identity serverIdentity;
+#endif
     std::unique_ptr<dht::DhtProxyServer> serverProxy;
 
     dht::DhtRunner::Context clientContext {};
diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp
index a29495fb479f4bd3e1655d0cebb92da0216c246e..6bef49e3d91ef2ae4feb6f08aaf1bd8edee24dba 100644
--- a/tools/dhtnode.cpp
+++ b/tools/dhtnode.cpp
@@ -225,11 +225,16 @@ void cmd_loop(std::shared_ptr<DhtRunner>& node, dht_params& params
 #endif // OPENDHT_PUSH_NOTIFICATIONS
             try {
                 unsigned int port = std::stoi(idstr);
+                proxies.emplace(port, std::unique_ptr<DhtProxyServer>(
+                    new DhtProxyServer(
+#ifdef OPENDHT_PROXY_OPENSSL
+                        params.id, /* dht::crypto::Identity */
+#endif
+                        node, port
 #ifdef OPENDHT_PUSH_NOTIFICATIONS
-                proxies.emplace(port, std::unique_ptr<DhtProxyServer>(new DhtProxyServer(node, port, pushServer)));
-#else
-                proxies.emplace(port, std::unique_ptr<DhtProxyServer>(new DhtProxyServer(node, port)));
-#endif // OPENDHT_PUSH_NOTIFICATIONS
+                        ,pushServer
+#endif
+                )));
             } catch (...) { }
             continue;
         } else if (op == "psp") {
@@ -554,7 +559,12 @@ main(int argc, char **argv)
 #endif
         if (params.proxyserver != 0) {
 #ifdef OPENDHT_PROXY_SERVER
-            proxies.emplace(params.proxyserver, std::unique_ptr<DhtProxyServer>(new DhtProxyServer(node, params.proxyserver, params.pushserver, context.logger)));
+            proxies.emplace(params.proxyserver, std::unique_ptr<DhtProxyServer>(
+                new DhtProxyServer(
+#ifdef OPENDHT_PROXY_OPENSSL
+                    params.id, /* dht::crypto::Identity */
+#endif
+                    node, params.proxyserver, params.pushserver, context.logger)));
 #else
             std::cerr << "DHT proxy server requested but OpenDHT built without proxy server support." << std::endl;
             exit(EXIT_FAILURE);