我的应用程序需要发送电子邮件,SMTP密码应该存储在哪里?如何存储?

7
似乎我创建的每个应用程序都需要能够发送偶尔的电子邮件,例如状态邮件。对于这个问题,假设我的应用程序是一个备份工具,本地安装在许多Windows客户端上,并且每个安装需要发送每日状态邮件。它可以安装在组织的服务器或私人计算机上。
我要求用户提供他拥有的电子邮件帐户的凭据(STMP主机、端口、用户名、密码、发件人地址)。我从像Atlassian Jira/Confluence或JFrog Artifactory这样的应用程序中复制了这种方法。他们在哪里以及如何存储SMTP密码呢?
我的当前理解是:盐/哈希方法在此不适用,因为我需要能够检索明文密码以实际发送电子邮件。我不想以明文形式存储密码,所以必须采用某种加密/解密方法(对吗?)。
我可以告诉用户不要使用他的主邮箱账户,而是使用一些次要帐户或者更好的是,设置一个专门供我的应用程序使用的特殊电子邮件账户。如果用户是组织的管理员,他可能能够在其交换服务器上设置电子邮件帐户或配置SMTP中继。但我知道自己和我私人用户,他们中的一些人仍然会使用他们的主要电子邮件帐户,因此我想尽一切办法尽可能地保护他们的凭据安全(我的意思是“遵循最佳实践”)。
最好情况下,我希望将加密后的密码存储在应用程序的数据库中。
我花了许多时间阅读stackoverflow上的问题,但我看不到共识(就像用户帐户登录凭据那样)。我觉得这很奇怪,因为我期望基本上每个开发人员迟早都会面临这个问题。
必须有一些最佳实践要遵循,一些已经建立的方法来解决这个问题,但我还没有找到它。
请指向SO / web上的资源,以解释如何解决此问题。如果可能,由该领域的某些专家编写。
我查看过的一些SO问题:
1个回答

1

如果您提供更多有关操作系统和编程语言的细节将会很好...

然而,这里有一些一般性建议:

您必须知道的最重要的事情是:如果您的应用程序能够在没有用户交互的情况下解密它(例如用户输入的密码或硬件令牌),那么任何攻击者都能够做到。您实施的所有措施只会增加获取此密码的复杂性。

当然,您应该尽可能提高门槛。对于Windows,DPAPI将是您的朋友。您可以在此处找到如何使用它的一些信息:http://www.c-sharpcorner.com/UploadFile/mosessaur/dpapiprotecteddataclass01052006142332PM/dpapiprotecteddataclass.aspx,使用C#(我不知道您使用的环境)。

你也可以实现自己的配置并使用本地密钥容器中存储的RSA密钥进行加密 - 参见http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider%28v=vs.100%29.aspx
也许其他人可以帮助你处理其他操作系统,但概念是相同的。
还有可能使用某种SSO身份验证,如Kerberos或NTLM等,但这意味着需要对邮件服务器进行修改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接