diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 3bccd1baa2a9d2d13c841a15264c6f804723048b..db87a2300c608958b64be712780de3744020d85b 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -4534,7 +4534,8 @@ typedef enum {
     SIGNER_COUNT                 = 5         // count flags
 } dap_sign_signer_file_t;
 
-static int s_sign_file(const char *a_filename, dap_sign_signer_file_t a_flags, dap_sign_t **a_signed, dap_chain_hash_fast_t *a_hash);
+static int s_sign_file(const char *a_filename, dap_sign_signer_file_t a_flags, const char *a_cert_name,
+                       dap_sign_t **a_signed, dap_chain_hash_fast_t *a_hash);
 static char **s_parse_items(const char *a_str, char a_delimiter, int *a_count, const int a_only_digit);
 static int s_signer_cmd(int a_arg_index, int a_argc, char **a_argv, char **a_str_reply);
 static int s_check_cmd(int a_arg_index, int a_argc, char **a_argv, char **a_str_reply);
@@ -4585,18 +4586,19 @@ int com_signer(int a_argc, char **a_argv, char **a_str_reply)
     return 0;
 }
 
-static int s_get_key_from_file(const char *a_file, const char *a_mime, dap_sign_t **a_sign);
+static int s_get_key_from_file(const char *a_file, const char *a_mime, const char *a_cert_name, dap_sign_t **a_sign);
 
 static int s_check_cmd(int a_arg_index, int a_argc, char **a_argv, char **a_str_reply)
 {
     int l_ret = 0;
-    enum {OPT_FILE, OPT_HASH, OPT_NET, OPT_MIME,
+    enum {OPT_FILE, OPT_HASH, OPT_NET, OPT_MIME, OPT_CERT,
           OPT_COUNT};
     struct opts l_opts_check[] = {
     { "-file", OPT_FILE },
     { "-hash", OPT_HASH },
     { "-net", OPT_NET },
-    { "-mime", OPT_MIME }
+    { "-mime", OPT_MIME },
+    { "-cert", OPT_CERT }
     };
 
     BUILD_BUG((sizeof(l_opts_check)/sizeof(struct opts)) != OPT_COUNT);
@@ -4606,6 +4608,10 @@ static int s_check_cmd(int a_arg_index, int a_argc, char **a_argv, char **a_str_
         dap_chain_node_cli_find_option_val(a_argv, a_arg_index, a_argc, l_opts_check[i].name, (const char **) &l_str_opts_check[i]);
     }
 
+    if (!l_str_opts_check[OPT_CERT]) {
+        dap_chain_node_cli_set_reply_text(a_str_reply, "%s need to be selected", l_opts_check[OPT_CERT].name);
+        return -1;
+    }
 
     dap_chain_net_t *l_network = dap_chain_net_by_name(l_str_opts_check[OPT_NET]);
     if (!l_network) {
@@ -4643,9 +4649,9 @@ static int s_check_cmd(int a_arg_index, int a_argc, char **a_argv, char **a_str_
     }
 
     if (l_str_opts_check[OPT_FILE]) {
-        l_ret = s_get_key_from_file(l_str_opts_check[OPT_FILE], l_str_opts_check[OPT_MIME], &l_sign);
+        l_ret = s_get_key_from_file(l_str_opts_check[OPT_FILE], l_str_opts_check[OPT_MIME], l_str_opts_check[OPT_CERT], &l_sign);
         if (!l_ret) {
-            return -1;
+            l_ret = -1;
             goto end;
         }
 
@@ -4673,7 +4679,7 @@ end:
     return 0;
 }
 
-static int s_get_key_from_file(const char *a_file, const char *a_mime, dap_sign_t **a_sign)
+static int s_get_key_from_file(const char *a_file, const char *a_mime, const char *a_cert_name, dap_sign_t **a_sign)
 {
     char **l_items_mime = NULL;
     int l_items_mime_count = 0;
@@ -4716,7 +4722,7 @@ static int s_get_key_from_file(const char *a_file, const char *a_mime, dap_sign_
 
     dap_chain_hash_fast_t l_hash;
 
-    int l_ret = s_sign_file(a_file, l_flags_mime, a_sign, &l_hash);
+    int l_ret = s_sign_file(a_file, l_flags_mime, a_cert_name, a_sign, &l_hash);
 
     return l_ret;
 }
@@ -4724,14 +4730,15 @@ static int s_get_key_from_file(const char *a_file, const char *a_mime, dap_sign_
 static int s_signer_cmd(int a_arg_index, int a_argc, char **a_argv, char **a_str_reply)
 {
     enum {
-        OPT_FILE, OPT_MIME, OPT_NET, OPT_CHAIN,
+        OPT_FILE, OPT_MIME, OPT_NET, OPT_CHAIN, OPT_CERT,
         OPT_COUNT
     };
     struct opts l_opts_signer[] = {
     { "-file", OPT_FILE },
     { "-mime", OPT_MIME },
     { "-net", OPT_NET },
-    { "-chain", OPT_CHAIN }
+    { "-chain", OPT_CHAIN },
+    { "-cert", OPT_CERT }
     };
 
     BUILD_BUG((sizeof(l_opts_signer)/sizeof(struct opts)) != OPT_COUNT);
@@ -4743,6 +4750,10 @@ static int s_signer_cmd(int a_arg_index, int a_argc, char **a_argv, char **a_str
         dap_chain_node_cli_find_option_val(a_argv, a_arg_index, a_argc, l_opts_signer[i].name, (const char **) &l_opts_sign[i]);
     }
 
+    if (!l_opts_sign[OPT_CERT]) {
+        dap_chain_node_cli_set_reply_text(a_str_reply, "%s need to be selected", l_opts_signer[OPT_CERT].name);
+        return -1;
+    }
 
 
     dap_chain_net_t *l_network = dap_chain_net_by_name(l_opts_sign[OPT_NET]);
@@ -4763,9 +4774,9 @@ static int s_signer_cmd(int a_arg_index, int a_argc, char **a_argv, char **a_str
     dap_global_db_obj_t *l_objs = NULL;
 
 
-    l_ret = s_get_key_from_file(l_opts_sign[OPT_FILE], l_opts_sign[OPT_MIME], &l_sign);
+    l_ret = s_get_key_from_file(l_opts_sign[OPT_FILE], l_opts_sign[OPT_MIME], l_opts_sign[OPT_CERT], &l_sign);
     if (!l_ret) {
-        return -1;
+        l_ret = -1;
         goto end;
     }
 
@@ -4898,7 +4909,8 @@ static uint8_t *s_concat_hash_and_mimetypes (dap_chain_hash_fast_t *a_chain, cha
  * @param a_flags
  * @return
  */
-static int s_sign_file(const char *a_filename, dap_sign_signer_file_t a_flags, dap_sign_t **a_signed, dap_chain_hash_fast_t *a_hash)
+static int s_sign_file(const char *a_filename, dap_sign_signer_file_t a_flags, const char *a_cert_name,
+                       dap_sign_t **a_signed, dap_chain_hash_fast_t *a_hash)
 {
     char **l_meta = NULL;
     uint32_t l_shift = 1;
@@ -4941,13 +4953,12 @@ static int s_sign_file(const char *a_filename, dap_sign_signer_file_t a_flags, d
 
     int l_ret = 0;
 
-    dap_enc_key_t *l_key = dap_enc_key_new_generate(DAP_ENC_KEY_TYPE_SIG_DILITHIUM, NULL, 0, "file", 4, 0);
-    if (!l_key) {
+    dap_cert_t *l_cert = dap_cert_find_by_name(a_cert_name);
+    if (!l_cert) {
         DAP_FREE(l_buffer);
         return 0;
     }
 
-
     if (!dap_hash_fast(l_buffer, l_file_content_size, a_hash)) {
         DAP_FREE(l_buffer);
         return 0;
@@ -4960,7 +4971,7 @@ static int s_sign_file(const char *a_filename, dap_sign_signer_file_t a_flags, d
         return 0;
     }
 
-    *a_signed = dap_sign_create(l_key, l_data, l_full_size_for_sign, 0);
+    *a_signed = dap_sign_create(l_cert->enc_key, l_data, l_full_size_for_sign, 0);
     if (*a_signed == NULL) {
         DAP_FREE(l_buffer);
         return 0;