【问题标题】:Use App Pool Credentials to Send Email使用应用程序池凭据发送电子邮件
【发布时间】:2014-06-17 20:42:17
【问题描述】:

我们有一个 asp.net 应用程序负责发送我们的产品电子邮件。我们想使用应用程序池帐户将经过身份验证的电子邮件发送到我们的交换服务器。

我们的 web.config 如下所示:

  <smtp deliveryMethod="Network" from="support@company.com">
    <network host="mail.company.com" defaultCredentials="true"/>
  </smtp>

基于the msdn docs,我希望它在发送电子邮件时使用应用程序池凭据。但是,在运行时不会尝试进行身份验证。

深入研究 System.Net 代码,看起来 defaultCredentials 选项将导致我们使用 CredentialCache.DefaultCredentials 属性,该属性使用空的用户名和密码填充凭据。因此,这可能是问题的原因。

出于安全考虑,我们不想在 smtp 配置部分中填充明确的用户名和密码。我们根本不想使用开放式中继(这是我们目前正在使用的),因为我们没有办法限制或停止电子邮件。

我们希望应用程序池进行身份验证,因此我们可以在应用程序遇到错误并通过电子邮件向我们发送垃圾邮件的情况下禁用邮箱(这已经发生)。

我们如何配置我们的应用程序以使用应用程序池凭据发送经过身份验证的电子邮件?

【问题讨论】:

  • 您是否使用集成身份验证?
  • 如果这就是您所要求的,我们不会从用户那里传递凭据,我们已将应用程序池设置为某个域帐户,该帐户使用 IUSR 匿名帐户访问磁盘上的元素。
  • 这会返回什么? System.Security.Principal.WindowsIdentity.GetCurrent().Name

标签: c# asp.net asp.net-mvc smtpclient system.net


【解决方案1】:

在发送电子邮件的代码中,执行以下操作...

SmtpClient client = new SmtpClient(); 
client.UseDefaultCredentials = false;
client.Credentials=new NetworkCredential("myusername","mypassword");

这将使用指定的用户名和密码。如果需要,您可以从加密文件或网络服务或其他安全位置检索用户名和密码。

另一种选择是encrypting your configuration file

【讨论】:

  • 我们的安全人员不希望开发人员访问凭据或知道其加密位置。
  • 开发人员知道在哪里。如果他们找不到它就不能使用它。只需让低权限帐户发送电子邮件即可。存储加密的密码,这样他们就看不到它。
【解决方案2】:

我怀疑这是不可能的,因为 SMTP 在大多数情况下都需要用户名和密码才能进行身份验证。如果您在任何内置帐户(如NETWORK SERVICEApplicationPoolIdentity)下运行应用程序池,则基本上没有凭据可以传递给 SMTP 使用。或者为了让它们工作,会在标准 SMTP 规范之外使用某种疯狂的非标准 Windows 身份验证形式。

然后,如果您以用户身份运行应用程序池,请the username and password are stored in encrypted, but reversible, format on the server。可以获取该用户名和密码并将其用于针对网络的更大规模攻击,因此如果可以运行随机应用程序来获取有效本地/域用户的凭据,则会带来更大的安全风险。或者更糟糕的是,您能想象一个桌面 .NET 应用程序正在运行,并且能够检索当前正在运行的用户凭据吗?如果您能够检索到这样的凭据,事情就会迅速走下坡路。

您有多种选择,包括使用 Web 服务发送电子邮件、创建本地 SMTP 服务器以仅允许从特定 IP 地址进行未经身份验证的访问、将用户名和密码放入应用程序代码、加密 web.config (梅森答案中的两个选项)。可能还有一些我现在想不出的选择。可能希望与您的基础架构中的系统管理员联系,看看哪些选项是可行的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 2010-12-02
    • 1970-01-01
    • 2020-08-22
    • 2012-03-29
    • 1970-01-01
    相关资源
    最近更新 更多