diff --git a/res/res_crypto.c b/res/res_crypto.c
index d8f328f088f8324fd3d4eb3795982ba423842295..e7cb728789cb847a662a25d87d1422af06dd1ff0 100644
--- a/res/res_crypto.c
+++ b/res/res_crypto.c
@@ -652,13 +652,17 @@ static int load_module(void)
 	} else {
 		crypto_load(-1, -1);
 	}
+
+	/* This prevents dlclose from ever running, but allows CLI cleanup at shutdown. */
+	ast_module_shutdown_ref(ast_module_info->self);
 	return AST_MODULE_LOAD_SUCCESS;
 }
 
 static int unload_module(void)
 {
-	/* Can't unload this once we're loaded */
-	return -1;
+	ast_cli_unregister_multiple(cli_crypto, ARRAY_LEN(cli_crypto));
+
+	return 0;
 }
 
 /* needs usecount semantics defined */