4

0 Visual Studio 2015 中的代码

1 我正在使用 Mailkit 最新版本 (1.18.1.1) 从我自己的电子邮件服务器发送电子邮件。

2 电子邮件服务器具有自签名证书,该证书不受信任。

3 我在代码中添加了以下两行,以忽略 SERVER CERTIFICATE 错误:

client.ServerCertificateValidationCallback = (mysender, certificate, chain, sslPolicyErrors) => { return true; };
client.CheckCertificateRevocation = false;

4 但我的程序仍然崩溃。

5 在电子邮件服务器日志中显示错误:

来自未知 [xxx.xxx.xxx.xxx] 的 SSL_accept 错误:对等方重置连接

我猜这是因为服务器证书问题。因为在 Wireshark 捕获中,一旦我获得 SERVER 证书,连接就会终止。

6 我还在我的系统中安装了电子邮件服务器的 UNTRUSTED 证书,但问题仍然存在。

7 以下是错误的详细截图 在此处输入图像描述

8 完整代码:

使用 (var client = new SmtpClient(new ProtocolLogger("logging.log")))

                    {

                        // For demo-purposes, accept all SSL certificates (in case the server supports STARTTLS)
                        client.ServerCertificateValidationCallback = (mysender, certificate, chain, sslPolicyErrors) => { return true; };
                        client.CheckCertificateRevocation = false;



                        client.Connect("xxx.com", 465, true);
                        // Note: since we don't have an OAuth2 token, disable
                        // the XOAUTH2 authentication mechanism.
                        client.AuthenticationMechanisms.Remove("XOAUTH2");

                        // Note: only needed if the SMTP server requires authentication
                        client.Authenticate("xxx@xxx.com","123456");

                        client.Send(message);
                        client.Disconnect(true);
}
4

2 回答 2

2

我的问题解决了。在 CONNECT 命令和 APP (c#) 开始工作之前,我添加了以下代码行!!!

client.SslProtocols = System.Security.Authentication.SslProtocols.Tls11;
于 2017-11-03T05:36:18.403 回答
1

如果您控制连接的两端,您可能需要首先检查没有 TLS 的发送,以确保问题仅在使用 TLS 时发生。

也尝试在没有wireshark、fiddler或其他中间人嗅探器/代理的情况下运行,以确保以安全的方式到达服务器没有问题。检查您的防病毒或互联网安全系统是否因为证书不受信任而关闭您的连接。

您可能要确保的另一件事是您的客户端和服务器共享相同的协议:我知道旧的 TLS 和 SSL 协议已被弃用,因此客户端和服务器之间可能没有通用协议。

您还可以尝试启用 system.net 跟踪(自 .NET 2.0 起可用)并查看是否从您获得的(非常详细的)日志中获得了一些更具体的见解: https ://blogs.msdn.microsoft.com/dgorti/2005 /09/18/使用系统网络跟踪/

System.Net 跟踪是 1) 每个进程 2) 显示线程 3) 适用于 SSL 4) 适用于环回。5)你不需要重新编译代码

[编辑]

您的问题似乎有点太宽泛,我无法猜测问题,请尝试缩小问题范围。例如:

  • 尝试不使用 TLS 进行连接;
  • 尝试连接到不同的 SMTP 服务器(使用您知道标准邮件客户端可以连接的服务器);
  • 尝试使用不同的客户端连接到您的服务器(例如使用雷鸟..)
  • 尝试在同一台机器上同时运行客户端和服务器;
  • 在干净的虚拟机上尝试相同的操作

顺便说一句,SSPI 似乎与受信任的安全问题有关,因此还要仔细检查您没有将服务器配置为仅接受受信任的用户。

[/编辑]

如果这还不够,我会尝试更新我的答案=)

高温高压

于 2017-10-31T15:52:14.197 回答