Security .NetCore 2.0生产中的安全存储凭据”;“内部前提”;服务器

Security .NetCore 2.0生产中的安全存储凭据”;“内部前提”;服务器,security,deployment,asp.net-core,Security,Deployment,Asp.net Core,当我读到在配置中存储Api键和连接字符串并将它们推送到git(即使是在私有存储库中)并不好时,我感到非常惊讶。我需要一个安全的网站。我用谷歌搜索了一下,找到了一些解决方案,但都不够好 1使用环境变量问题以纯文本形式向用户公开 2然后将其保存在一个未推送到git的配置文件中(将文件夹/文件放入.gitignore.问题以明文形式公开) 3应在启动配置文件时对配置进行加密和解密。问题加密/解密密钥需要以明文形式保存在服务器上。 4.与3类似,但加密密钥一半存储在git中,一半存储在硬盘上。 问题这结

当我读到在配置中存储Api键和连接字符串并将它们推送到git(即使是在私有存储库中)并不好时,我感到非常惊讶。我需要一个安全的网站。我用谷歌搜索了一下,找到了一些解决方案,但都不够好

1使用环境变量问题以纯文本形式向用户公开

2然后将其保存在一个未推送到git的配置文件中(将文件夹/文件放入.gitignore.问题以明文形式公开)

3应在启动配置文件时对配置进行加密和解密。问题加密/解密密钥需要以明文形式保存在服务器上。 4.与3类似,但加密密钥一半存储在git中,一半存储在硬盘上。 问题这结合了服务器上的git和纯文本

到目前为止,这些都是我接触过的版本,但它们似乎都有问题。 在使用.netCore 2.0时,您认为保存api密钥/连接字符串/秘密加密字符串的最佳选项是什么


部署服务器是centOs 7“内部”服务器使用.netCore 2.0和apache服务器作为反向代理的服务器。

主要关注的是将机密泄漏到源代码管理中,特别是如果它是Github之类的公共存储库。为此,您只需在源代码中不保留机密。在开发中,您可以利用用户机密,在生产中,您可以利用某些机密例如环境变量或Azure KeyVault

就以加密方式实际存储机密而言,Azure KeyVault是目前唯一可用的开箱即用解决方案。不过,无论您的应用程序是否真的托管在Azure中,您都可以使用KeyVault。虽然它不是免费的,但价格便宜,几乎与免费的一样

除此之外,您最好的选择是环境变量。这些变量可以通过受限的方式设置,这样只有特定的帐户才能访问它们,然后,您需要实际访问服务器才能访问它们。虽然它没有加密,但如果值泄漏,则会出现这样的情况,这实际上是您最不关心的问题关注点


最后,您始终可以编写自己的配置提供程序,并对其执行任何需要执行的操作。例如,您可以编写一个处理加密JSON的配置,或使用Web.config的配置,然后对您的Web.config进行加密。

这不是一个唯一的问题,也绝对不是.NET Core所独有的。如果有人有控制台或文件系统访问您的服务器,那么所有的赌注都没有了。@CodeCaster我知道这不是唯一的问题,我只是没有找到一个好的anwser,直到now@CodeCaster因此,如果攻击者可以访问服务器,那么配置是否为纯文本并不重要。因此,第二个选项应该足够好。对吗?@JamieTayl或者用户机密不在生产环境中运行。它们只在开发环境中运行。当然。从不建议您这样做,只是说还有其他选项。另外,用户机密确实在生产环境中运行,但不建议这样做。