Ssl 无法使用TLS将邮件发送到本地SMTP服务器

Ssl 无法使用TLS将邮件发送到本地SMTP服务器,ssl,smtp,exchange-server,Ssl,Smtp,Exchange Server,因此,我们有一个本地exchange服务器,用作内部服务器的SMTP服务器。我正试图修复它,使其与TLS一起工作,但现在它不是 我已将通配符证书分配给SMTP和IIS角色。但是,当我尝试通过PowerShell使用发送邮件时,我得到了一个例子 Send-MailMessage -SmtpServer mail.domain.com -UseSsl -port 465 -From fromaddress -To tomailaddress -Subject test -BodyAsHtml te

因此,我们有一个本地exchange服务器,用作内部服务器的SMTP服务器。我正试图修复它,使其与TLS一起工作,但现在它不是

我已将通配符证书分配给SMTP和IIS角色。但是,当我尝试通过PowerShell使用
发送邮件时,我得到了一个例子

Send-MailMessage -SmtpServer mail.domain.com -UseSsl -port 465 -From fromaddress 
-To tomailaddress -Subject test -BodyAsHtml test -Encoding ([System.Text.Encoding]::UTF8)
根据验证过程,远程证书无效

当我转到IIS站点(或使用相同证书的任何其他站点)时,使用的证书对我有效


那么我做错了什么?或者如何对此进行故障排除。

请注意,SMTP的SSL证书无法通过IIS进行管理。您需要在此处使用powershell(启用ExchangeCertificate)[更多信息

例如:

启用ExchangeCertificate-指纹 434AC224C8459924B26521298CE8834C514856AB-服务SMTP

一般来说,您可以使用Openssl(请参阅以获取howto)对此类TLS连接(通过端口465)进行故障排除

该URL还提供了一些解决方案,因此我不会将它们全部复制到这里。一般来说,问题是:

  • SSL证书在远程计算机上(或密钥库中)不完全受信任,密钥库不适用于您的powershell测试,但可能适用于您的第三方软件)
  • SMTP仍在使用自签名SSL证书
结论:
我认为您仍然在SMTP端口上使用自签名ssl证书,应该使用上面的命令更改它。

我也有同样的问题。首先,我使用下面的代码保存SMTP服务器使用的证书副本(因为我没有访问服务器本身的权限/即使您有访问权限,这也会显示显示的是哪台服务器,因此可能会标记它是否与您预期的不同)。我通过LinqPad5以c#程序运行了此操作

然后,我可以通过查看保存的文件来检查证书:
C:\Temp\cert.cer

检查有效期以确保证书有效。 如果不是,那就是问题所在。获取新证书

检查我的客户端的受信任CA中的根证书:

  • 启动,运行,MMC
  • 文件>添加/删除管理单元>证书>添加>我的用户帐户>完成>确定
  • 证书-当前用户>受信任的根证书颁发机构>证书
  • 在此列表中搜索根CA(即与您的证书同名的CA)
如果不是,您可能需要安装根CA、中间CA或证书本身(您可以使用刚才使用上述脚本保存的文件进行安装)

检查防火墙上的端口是否打开。您可以通过以下PowerShell进行测试:

try {
    $tcp = New-Object -TypeName 'system.net.sockets.tcpclient' -ArgumentList 'smtprelay.subdomain.example.com', 465 
    if ($tcp.Connected) {':)'} else {':('}
} catch {
    ':('
    $_.Exception.Message
}

在我的例子中,上述所有内容都不足以发现问题。最终我意识到该服务使用了通配符证书(例如
*.example.com
),但邮件服务器位于子域(例如
smtprelay.subdomain.example.com
)上,因此不包含在该证书中。在子域上使用通配符(例如,
*.subdomain.example.com
)本来可以工作,但我们只是要求为服务提供一个明确命名的证书(对于
smtprelay.subdomain.example.com
),包括服务的各个节点的FQDN作为使用者备选名称,以防我们需要将特定节点作为调试的目标。

我记得在续订证书时通过powershell将该证书添加到服务中。但是我可以看到,我们有更多的证书分配给SMTP服务。我尝试将它们粘贴到此处b但是stackoverflow说我使用了很多字符。从SMTP服务中删除其他证书安全吗?FriendlyName:TenantEncryptionCert FriendlyName:wildcard.domain.com FriendlyName:Microsoft Exchange FriendlyName:Exchange委派联合会FriendlyName:Microsoft Exchange Server身份验证证书要在t上安全方面,您可以使用MMC和SSL管理单元导出要删除的SSL证书(使用公钥!!!)。然后您可以导入它们。但是,通常只有一个SSL证书分配给一个端口。一个端口不能有多个SSL证书。但可能是有不同的连接器具有不同的端口,因此分配了不同的SSL证书(因为它们都是不同的SMTP连接器)。您可以将输出传递到pastbin并在此处添加链接。从输出中删除任何敏感信息,如主机名。更改注释时更新:不应删除MS默认证书“Microsoft Exchange Server身份验证证书”、“Exchange委派联合身份验证”以此类推。只有使用上面提到的正确ssl证书替换SMTP端口上错误的ssl证书。您还应该向openSSL检查使用了哪个ssl证书,然后确定使用了错误的ssl证书,并且需要替换该证书。
try {
    $tcp = New-Object -TypeName 'system.net.sockets.tcpclient' -ArgumentList 'smtprelay.subdomain.example.com', 465 
    if ($tcp.Connected) {':)'} else {':('}
} catch {
    ':('
    $_.Exception.Message
}