diff --git a/src/management/nfd-command-options.cpp b/src/management/nfd-command-options.cpp
index 97a1be8..72326c9 100644
--- a/src/management/nfd-command-options.cpp
+++ b/src/management/nfd-command-options.cpp
@@ -108,8 +108,8 @@
   return *this;
 }
 
-CommandOptions&
-CommandOptions::setSigningCertificate(const Name& certificateName)
+static security::SigningInfo
+makeSigningInfoFromIdentityCertificate(const Name& certificateName)
 {
   // A valid IdentityCertificate has at least 4 name components,
   // as it follows `<...>/KEY/<...>/<key-id>/ID-CERT/<version>` naming model.
@@ -117,14 +117,21 @@
     throw std::invalid_argument("certificate is invalid");
   }
 
-  m_signingInfo = security::signingByCertificate(certificateName);
+  return security::signingByCertificate(certificateName);
+}
+
+CommandOptions&
+CommandOptions::setSigningCertificate(const Name& certificateName)
+{
+  m_signingInfo = makeSigningInfoFromIdentityCertificate(certificateName);
   return *this;
 }
 
 CommandOptions&
 CommandOptions::setSigningCertificate(const IdentityCertificate& certificate)
 {
-  return this->setSigningCertificate(certificate.getName());
+  m_signingInfo = makeSigningInfoFromIdentityCertificate(certificate.getName());
+  return *this;
 }
 
 #endif // NDN_MANAGEMENT_NFD_COMMAND_OPTIONS_KEEP_DEPRECATED_SIGNING_PARAMS
diff --git a/src/management/nfd-command-options.hpp b/src/management/nfd-command-options.hpp
index 7d43c1d..b88356f 100644
--- a/src/management/nfd-command-options.hpp
+++ b/src/management/nfd-command-options.hpp
@@ -110,30 +110,34 @@
   /** \deprecated use getSigningInfo and setSigningInfo
    *  \return selection of signing parameters
    */
+  DEPRECATED(
   SigningParamsKind
-  getSigningParamsKind() const;
+  getSigningParamsKind() const);
 
   /** \deprecated use getSigningInfo and setSigningInfo
    *  \return identity Name
    *  \pre getSigningParamsKind() == SIGNING_PARAMS_IDENTITY
    */
+  DEPRECATED(
   const Name&
-  getSigningIdentity() const;
+  getSigningIdentity() const);
 
   /** \deprecated use getSigningInfo and setSigningInfo
    *  \return certificate Name
    *  \pre getSigningParamsKind() == SIGNING_PARAMS_CERTIFICATE
    */
+  DEPRECATED(
   const Name&
-  getSigningCertificate() const;
+  getSigningCertificate() const);
 
   /** \deprecated use getSigningInfo and setSigningInfo
    *  \brief chooses to use default identity and certificate
    *  \post getSigningParamsKind() == SIGNING_PARAMS_DEFAULT
    *  \return self
    */
+  DEPRECATED(
   CommandOptions&
-  setSigningDefault();
+  setSigningDefault());
 
   /** \deprecated use getSigningInfo and setSigningInfo
    *  \brief chooses to use a specific identity and its default certificate
@@ -141,8 +145,9 @@
    *  \post getIdentityName() == identityName
    *  \return self
    */
+  DEPRECATED(
   CommandOptions&
-  setSigningIdentity(const Name& identityName);
+  setSigningIdentity(const Name& identityName));
 
   /** \deprecated use getSigningInfo and setSigningInfo
    *  \brief chooses to use a specific identity certificate
@@ -152,15 +157,17 @@
    *  \post getSigningCertificate() == certificateName
    *  \return self
    */
+  DEPRECATED(
   CommandOptions&
-  setSigningCertificate(const Name& certificateName);
+  setSigningCertificate(const Name& certificateName));
 
   /** \deprecated use getSigningInfo and setSigningInfo
    *  \brief chooses to use a specific identity certificate
    *  \details This is equivalent to .setIdentityCertificate(certificate.getName())
    */
+  DEPRECATED(
   CommandOptions&
-  setSigningCertificate(const IdentityCertificate& certificate);
+  setSigningCertificate(const IdentityCertificate& certificate));
 
 #endif // NDN_MANAGEMENT_NFD_COMMAND_OPTIONS_KEEP_DEPRECATED_SIGNING_PARAMS
 
diff --git a/tests/unit-tests/management/nfd-command-options.t.cpp b/tests/unit-tests/management/nfd-command-options.t.cpp
index d67d865..4cccc95 100644
--- a/tests/unit-tests/management/nfd-command-options.t.cpp
+++ b/tests/unit-tests/management/nfd-command-options.t.cpp
@@ -22,10 +22,6 @@
 #include "management/nfd-command-options.hpp"
 #include "security/signing-helpers.hpp"
 
-#ifdef NDN_MANAGEMENT_NFD_COMMAND_OPTIONS_KEEP_DEPRECATED_SIGNING_PARAMS
-#include "security/identity-certificate.hpp"
-#endif // NDN_MANAGEMENT_NFD_COMMAND_OPTIONS_KEEP_DEPRECATED_SIGNING_PARAMS
-
 #include "boost-test.hpp"
 
 namespace ndn {
@@ -72,48 +68,6 @@
   BOOST_CHECK_EQUAL(co.getSigningInfo().getSignerName(), "ndn:/tmp/identity");
 }
 
-#ifdef NDN_MANAGEMENT_NFD_COMMAND_OPTIONS_KEEP_DEPRECATED_SIGNING_PARAMS
-BOOST_AUTO_TEST_CASE(SigningParams)
-{
-  CommandOptions co;
-  BOOST_CHECK_EQUAL(co.getSigningParamsKind(), CommandOptions::SIGNING_PARAMS_DEFAULT);
-
-  co.setSigningIdentity("ndn:/tmp/identity");
-  BOOST_CHECK_EQUAL(co.getSigningParamsKind(), CommandOptions::SIGNING_PARAMS_IDENTITY);
-  BOOST_CHECK_EQUAL(co.getSigningIdentity(), Name("ndn:/tmp/identity"));
-
-  co.setSigningDefault(); // reset
-  BOOST_CHECK_EQUAL(co.getSigningParamsKind(), CommandOptions::SIGNING_PARAMS_DEFAULT);
-
-  co.setSigningIdentity(Name()); // empty Name is valid identity Name
-  BOOST_CHECK_EQUAL(co.getSigningParamsKind(), CommandOptions::SIGNING_PARAMS_IDENTITY);
-  BOOST_CHECK_EQUAL(co.getSigningIdentity(), Name());
-
-  co.setSigningDefault(); // reset
-  BOOST_CHECK_EQUAL(co.getSigningParamsKind(), CommandOptions::SIGNING_PARAMS_DEFAULT);
-
-  co.setSigningCertificate("ndn:/tmp/KEY/identity/dsk-1/ID-CERT/%FD%01");
-  BOOST_CHECK_EQUAL(co.getSigningParamsKind(), CommandOptions::SIGNING_PARAMS_CERTIFICATE);
-  BOOST_CHECK_EQUAL(co.getSigningCertificate(),
-                    Name("ndn:/tmp/KEY/identity/dsk-1/ID-CERT/%FD%01"));
-
-  co.setSigningDefault(); // reset
-  BOOST_CHECK_EQUAL(co.getSigningParamsKind(), CommandOptions::SIGNING_PARAMS_DEFAULT);
-
-  co.setSigningCertificate("ndn:/KEY/dsk-1/ID-CERT/%FD%01"); // minimal certificateName
-  BOOST_CHECK_EQUAL(co.getSigningParamsKind(), CommandOptions::SIGNING_PARAMS_CERTIFICATE);
-  BOOST_CHECK_EQUAL(co.getSigningCertificate(), Name("ndn:/KEY/dsk-1/ID-CERT/%FD%01"));
-
-  co.setSigningDefault(); // reset
-  BOOST_CHECK_EQUAL(co.getSigningParamsKind(), CommandOptions::SIGNING_PARAMS_DEFAULT);
-
-  BOOST_CHECK_THROW(co.setSigningCertificate(IdentityCertificate()), // invalid certificate
-                    std::invalid_argument);
-  BOOST_CHECK_EQUAL(co.getSigningParamsKind(),
-                    CommandOptions::SIGNING_PARAMS_DEFAULT); // unchanged after throw
-}
-#endif // NDN_MANAGEMENT_NFD_COMMAND_OPTIONS_KEEP_DEPRECATED_SIGNING_PARAMS
-
 BOOST_AUTO_TEST_SUITE_END()
 
 } // namespace tests
