diff --git a/tools/dnc/dnc.yaml b/tools/dnc/dnc.yaml
new file mode 100644
index 0000000..6e092fa
--- /dev/null
+++ b/tools/dnc/dnc.yaml
@@ -0,0 +1,9 @@
+bootstrap: "bootstrap.jami.net"
+id_path: HOME/.dhtnet # Change this to the path of the id directory
+turn_host: "turn.jami.net"
+turn_user: "ring"
+turn_pass: "ring"
+turn_realm: "ring"
+port: 22
+ip: "127.0.0.1"
+CA: Home/.dhtnet # Change this to the path of the CA directory
diff --git a/tools/dnc/main.cpp b/tools/dnc/main.cpp
index f89661e..0ba8b57 100644
--- a/tools/dnc/main.cpp
+++ b/tools/dnc/main.cpp
@@ -28,6 +28,8 @@
 #include <fmt/ostream.h>
 #endif
 #include <netinet/in.h>
+#include <yaml-cpp/yaml.h>
+#include <fstream>
 
 struct dhtnc_params
 {
@@ -43,27 +45,32 @@
     std::string turn_user {};
     std::string turn_pass {};
     std::string turn_realm {};
+    std::string ca {};
+    std::string dnc_configuration {};
 };
 
-static const constexpr struct option long_options[] = {{"help", no_argument, nullptr, 'h'},
-                                                       {"version", no_argument, nullptr, 'v'},
-                                                       {"port", required_argument, nullptr, 'p'},
-                                                       {"ip", required_argument, nullptr, 'i'},
-                                                       {"listen", no_argument, nullptr, 'l'},
-                                                       {"bootstrap", required_argument, nullptr, 'b'},
-                                                       {"id_path", required_argument, nullptr, 'I'},
-                                                       {"turn_host", required_argument, nullptr, 't'},
-                                                       {"turn_user", required_argument, nullptr, 'u'},
-                                                       {"turn_pass", required_argument, nullptr, 'w'},
-                                                       {"turn_realm", required_argument, nullptr, 'r'},
-                                                       {nullptr, 0, nullptr, 0}};
+static const constexpr struct option long_options[]
+    = {{"help", no_argument, nullptr, 'h'},
+       {"version", no_argument, nullptr, 'v'},
+       {"port", required_argument, nullptr, 'p'},
+       {"ip", required_argument, nullptr, 'i'},
+       {"listen", no_argument, nullptr, 'l'},
+       {"bootstrap", required_argument, nullptr, 'b'},
+       {"id_path", required_argument, nullptr, 'I'},
+       {"turn_host", required_argument, nullptr, 't'},
+       {"turn_user", required_argument, nullptr, 'u'},
+       {"turn_pass", required_argument, nullptr, 'w'},
+       {"turn_realm", required_argument, nullptr, 'r'},
+       {"CA", required_argument, nullptr, 'C'},
+       {"dnc_configuration", required_argument, nullptr, 'd'},
+       {nullptr, 0, nullptr, 0}};
 
 dhtnc_params
 parse_args(int argc, char** argv)
 {
     dhtnc_params params;
     int opt;
-    while ((opt = getopt_long(argc, argv, "hvlw:r:u:t:I:b:p:i:", long_options, nullptr)) != -1) {
+    while ((opt = getopt_long(argc, argv, "hvlw:r:u:t:I:b:p:i:C:d:", long_options, nullptr)) != -1) {
         switch (opt) {
         case 'h':
             params.help = true;
@@ -98,6 +105,11 @@
         case 'r':
             params.turn_realm = optarg;
             break;
+        case 'C':
+            params.ca = optarg;
+            break;
+        case 'd':
+            params.dnc_configuration = optarg;
         default:
             std::cerr << "Invalid option" << std::endl;
             exit(EXIT_FAILURE);
@@ -115,23 +127,43 @@
         }
     }
 
-    // default values
-    if (params.remote_port == 0)
-        params.remote_port = 22;
-    if (params.remote_host.empty())
-        params.remote_host = "127.0.0.1";
-    if (params.bootstrap.empty())
-        params.bootstrap = "bootstrap.jami.net";
-    if (params.path.empty())
-        params.path = std::filesystem::path(getenv("HOME")) / ".dhtnet";
-    if (params.turn_host.empty())
-        params.turn_host = "turn.jami.net";
-    if (params.turn_user.empty())
-        params.turn_user = "ring";
-    if (params.turn_pass.empty())
-        params.turn_pass = "ring";
-    if (params.turn_realm.empty())
-        params.turn_realm = "ring";
+    // extract values from dnc yaml file
+    if (!params.dnc_configuration.empty()) {
+        printf("read configuration file: %s\n", params.dnc_configuration.c_str());
+        std::ifstream config_file(params.dnc_configuration);
+        if (!config_file.is_open()) {
+            std::cerr << "Error: Could not open configuration file.\n";
+        } else {
+            YAML::Node config = YAML::Load(config_file);
+            if (config["bootstrap"] && params.bootstrap.empty()) {
+                params.bootstrap = config["bootstrap"].as<std::string>();
+            }
+            if (config["id_path"] && params.path.empty()) {
+                params.path = config["id_path"].as<std::string>();
+            }
+            if (config["turn_host"] && params.turn_host.empty()) {
+                params.turn_host = config["turn_host"].as<std::string>();
+            }
+            if (config["turn_user"] && params.turn_user.empty()) {
+                params.turn_user = config["turn_user"].as<std::string>();
+            }
+            if (config["turn_pass"] && params.turn_pass.empty()) {
+                params.turn_pass = config["turn_pass"].as<std::string>();
+            }
+            if (config["turn_realm"] && params.turn_realm.empty()) {
+                params.turn_realm = config["turn_realm"].as<std::string>();
+            }
+            if (config["CA"] && params.ca.empty()) {
+                params.ca = config["CA"].as<std::string>();
+            }
+            if (config["ip"] && params.remote_host.empty()) {
+                params.dnc_configuration = config["ip"].as<std::string>();
+            }
+            if (config["port"] && params.remote_port == 0) {
+                params.remote_port = config["port"].as<int>();
+            }
+        }
+    }
     return params;
 }
 
@@ -156,20 +188,21 @@
     setSipLogLevel();
     auto params = parse_args(argc, argv);
 
-    if (params.help ){
-          fmt::print("Usage: dnc [options] [PEER_ID]\n"
-               "\nOptions:\n"
-               "  -h, --help            Show this help message and exit.\n"
-               "  -v, --version         Display the program version.\n"
-               "  -p, --port            Specify the port option with an argument.\n"
-               "  -i, --ip              Specify the ip option with an argument.\n"
-               "  -l, --listen          Start the program in listen mode.\n"
-               "  -b, --bootstrap       Specify the bootstrap option with an argument.\n"
-               "  -I, --id_path         Specify the id_path option with an argument.\n"
-               "  -t, --turn_host       Specify the turn_host option with an argument.\n"
-               "  -u, --turn_user       Specify the turn_user option with an argument.\n"
-               "  -w, --turn_pass       Specify the turn_pass option with an argument.\n"
-               "  -r, --turn_realm      Specify the turn_realm option with an argument.\n");
+    if (params.help) {
+        fmt::print("Usage: dnc [options] [PEER_ID]\n"
+                   "\nOptions:\n"
+                   "  -h, --help            Show this help message and exit.\n"
+                   "  -v, --version         Display the program version.\n"
+                   "  -p, --port            Specify the port option with an argument.\n"
+                   "  -i, --ip              Specify the ip option with an argument.\n"
+                   "  -l, --listen          Start the program in listen mode.\n"
+                   "  -b, --bootstrap       Specify the bootstrap option with an argument.\n"
+                   "  -I, --id_path         Specify the id_path option with an argument.\n"
+                   "  -t, --turn_host       Specify the turn_host option with an argument.\n"
+                   "  -u, --turn_user       Specify the turn_user option with an argument.\n"
+                   "  -w, --turn_pass       Specify the turn_pass option with an argument.\n"
+                   "  -r, --turn_realm      Specify the turn_realm option with an argument.\n"
+                   "  -C, --CA              Specify the CA option with an argument.\n");
         return EXIT_SUCCESS;
     }
     if (params.version) {
@@ -178,13 +211,19 @@
     }
 
     fmt::print("dnc 1.0\n");
-    auto identity = dhtnet::loadIdentity(params.path);
+    auto identity = dhtnet::loadIdentity(params.path, params.ca);
     fmt::print("Loaded identity: {} from {}\n", identity.second->getId(), params.path);
 
     std::unique_ptr<dhtnet::Dnc> dhtnc;
     if (params.listen) {
         // create dnc instance
-        dhtnc = std::make_unique<dhtnet::Dnc>(params.path, identity, params.bootstrap, params.turn_host, params.turn_user, params.turn_pass, params.turn_realm);
+        dhtnc = std::make_unique<dhtnet::Dnc>(params.path,
+                                              identity,
+                                              params.bootstrap,
+                                              params.turn_host,
+                                              params.turn_user,
+                                              params.turn_pass,
+                                              params.turn_realm);
     } else {
         dhtnc = std::make_unique<dhtnet::Dnc>(params.path,
                                               identity,
@@ -195,8 +234,7 @@
                                               params.turn_host,
                                               params.turn_user,
                                               params.turn_pass,
-                                              params.turn_realm
-                                            );
+                                              params.turn_realm);
     }
     dhtnc->run();
     return EXIT_SUCCESS;
