如何在 Windows 和 Linux 上正确存储 .NET Core 非交互式应用程序凭据?

Posted

技术标签:

【中文标题】如何在 Windows 和 Linux 上正确存储 .NET Core 非交互式应用程序凭据?【英文标题】:How to store .NET Core non-interactive app credentials properly on both Windows and Linux? 【发布时间】:2021-06-04 08:41:59 【问题描述】:

我需要为我的应用存储凭据。我读过用代码存储它们是一种非常糟糕的做法。

我知道,DPAPI 就是为它而生的,但是如何在像 Ubuntu 这样的 Linux 上使用它呢? 所以 - 如果我可以让 DPAPI 在 Linux 上运行而无需花费一整天的时间 - 这将是我的第一选择。

然后是穷人的安全 - 目标机器上的文件。所以 - 不是与源;)该文件位于只有管理员可以访问的目录中,因此它与主机本身一样安全。我也可以将文件放在我的 Windows 开发机器上,它和我的机器一样安全。

告诉我为什么文件不好? ;)

【问题讨论】:

您存储了谁的凭据?用户的?为什么不将它们存储在 ~/.yourapp 中?用户输入了它们,所以他们知道它们是什么。需要访问服务器的东西?同样,如果它们是用户信用,那么 ~/.如果它们是服务器凭据,那么是谁在输入它们?您的代码是否需要与服务器联系?然后不要存储凭据,存储服务器已经给客户端的令牌(超时)(基于他们的凭据)。 两者。用户和系统。我的服务需要访问数据库,然后它必须存储他们用于外部服务的用户凭据。我会将它们加密存储在我的数据库中,但同样,我也需要存储加密密钥。在我的开发机器和目标服务器上。启动服务有一个截止日期,然后它可以更适当地开发,所以我现在寻找一种快速的方法,但不是一个完全安全的恐惧。 你在保护它免受谁的侵害?用户还是 FBI?用户可能不在乎,而 FBI 可能不值得。 【参考方案1】:

我需要为我的应用存储凭据。

嗯嗯嗯。

我读过用代码存储它们是一种非常糟糕的做法。

不是“使用代码”,而是 in 代码:即作为字符串文字烘焙到您的可执行文件中。

我知道,DPAPI 就是为此而生的

是的。

但是如何在像 Ubuntu 这样的 Linux 上使用它呢?

困难重重。

所以 - 如果我可以让 DPAPI 在 Linux 上运行而无需花费一整天的时间 - 这将是我的第一选择。

你不能。 DPAPI 是一个 Windows thang

然后是穷人的安全 - 目标机器上的文件。所以 - 不是与来源

至少在 Linux 上,您可以利用简单得多的文件系统安全模型来保护文件不被其他用户访问,而无需太多努力(即 chmod,与 Windows 相比,您需要关注 DACL(注意:客观上来说,DACL 仍然很远,远远优于 chmod。考虑使用 SELinux 在 Windows 之外获取 DACL)。

该文件位于只有管理员可以访问的目录中,因此它与主机本身一样安全。

值得商榷。

告诉我为什么文件不好? ;)

我不能。您还没有告诉我们关于该文件的任何信息


更好的解决方案:利用任何可用的硬件 TPM 来存储加密密钥:https://wiki.archlinux.org/index.php/Trusted_Platform_Module

【讨论】:

文件不是很相关。只需一个密码或 AES 密钥。这总是一个秘密的问题。其余的可以加密和/或保存在 AKV 上。 @Harry 在这种情况下什么是“AKV”? Azure 密钥库。 TPM 是要走的路。在 .net 上并不是那么容易(但有可能)

以上是关于如何在 Windows 和 Linux 上正确存储 .NET Core 非交互式应用程序凭据?的主要内容,如果未能解决你的问题,请参考以下文章

Linux如何正确关机

C++ 程序在 Linux 上正确打开文件,但在 Windows 上不正确

如何在linux系统里访问windows的磁盘共享文件

如何正确对待和处理Windows更新问题?

如何在 Windows 或 Linux 上使用 Skia

如何在 Linux 上使用 Ruby 实现实时 USB 存储检测?