7

似乎我创建的每个应用程序都需要能够偶尔发送电子邮件。例如状态电子邮件。对于这个问题,假设我的应用程序是一个备份工具,本地安装在许多 windows 客户端上,并且每次安装都需要发送每日状态邮件。它可以安装在组织的服务器或私人计算机上。

我要求用户向他拥有的电子邮件帐户提供凭据(STMP 主机、端口、用户名、密码、发件人地址)。我从 Atlassian Jira/Confluence 或 JFrog Artifactory 等应用程序中复制了这种方法。他们在哪里以及如何存储 SMTP 密码?

我目前的理解是:Salting/Hashing 方法不适用于此处,因为我需要能够检索明文密码才能实际发送电子邮件。我不想以明文形式存储密码,所以它必须是某种加密/解密方法(对吗?)。

我可以告诉用户不要使用他的主电子邮件帐户,而是使用一些辅助帐户,或者更好的是,设置一个特殊的电子邮件帐户供我的应用程序使用。如果用户是组织的管理员,他可能能够在其 Exchange 服务器上设置电子邮件帐户或配置 SMTP 中继。但是,我了解我,我也了解我的私人用户,他们中的一些人无论如何都会使用他们的主电子邮件帐户,所以我想尽我所能确保他们的凭据尽可能安全(我的意思是“遵循最佳实践”)。

最好我想将加密的密码存储在应用程序的数据库中。

我花了几个小时阅读有关 stackoverflow 的问题,但我看不到共识(就像用户帐户登录凭据一样)。我觉得这很令人惊讶,因为我预计基本上每个开发人员迟早都会遇到这个问题。

必须遵循一些最佳实践,一些既定的方法来解决这个问题,但我还没有找到它。

请指出我在 SO/网络上解释如何解决这个问题的资源。如果可能的话,由该领域的一些专家撰写。

我看过的一些SO问题:

4

1 回答 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=与 100%29.aspx 相比

也许其他一些人可以帮助您使用其他操作系统,但概念将是相同的。

也可能使用某种 SSO 身份验证,如 Kerberos 或 NTLM 或 ...,但这意味着对邮件服务器进行修改。

于 2013-07-12T08:40:45.280 回答