【问题标题】:C# Mailkit/Mimekit SSL cipher issue, unable to send/recv emailsC# Mailkit/Mimekit SSL 密码问题,无法发送/接收电子邮件
【发布时间】:2017-11-03 03:42:29
【问题描述】:

我正在编写一个 C# 电子邮件应用程序(电子邮件客户端)。但是,每次我尝试与服务器启动 TLS 会话时都会出现错误,通过 Wireshark 进行调试显示存在某种 TLS/SSL 问题导致连接被重置

客户端 ---> 使用 MAILKIT/MIMEKIT 的 C# 应用程序(MS VS 2015)

服务器 ---> 基于 Linux 的电子邮件服务器,已分配自签名证书。

现在,当我使用 Thunderbird 连接(发送/接收电子邮件)到我的邮件服务器时,一切正常,但如果我使用我的应用程序会显示错误。

  1. Mailkit/Mimekit Wireshark TLS 捕获
  2. Mailkit/Mimekit 发送到我的服务器的密码套件
  3. 服务器接受的密码
  4. Thunderbird Wireshark TLS 捕获
  5. Thunderbird 向我的服务器发送的密码套件
  6. 服务器接受的密码
  7. 我的 C# APP 显示的错误

邮件服务器日志中显示错误:

来自未知 [xxx.xxx.xxx.xxx] 的 SSL_accept 错误:连接由 同行

谁能指导我怎么做?我无法在服务器端更改/更新 CIPHERSUITE。此外,在我的代码中,我忽略了 UNTRUSTED CERTIFICATE 检查,因此不会因为自签名证书而出现错误。

【问题讨论】:

  • 这看起来不像是密码问题。客户端在收到服务器成功响应后关闭连接——这意味着服务器成功地从客户端提供的密码中选择了一个密码。客户端关闭的可能性更大,因为它不喜欢服务器证书。但是您的问题中没有足够的信息来进一步追查问题。

标签: c# email ssl wireshark mailkit


【解决方案1】:

我通过在我的 C# 代码中的 CONNECT 命令之前添加以下行解决了这个问题。添加代码:

client.SslProtocols = System.Security.Authentication.SslProtocols.Tls11;

但是,相同的密码 (TLS_RSA_WITH_AES_128_CBC_SHA) 仍然由客户端发送并由服务器接受。这是 TLS 1.1 运行,而 Thunderbird 使用 TLS1.2 并且可以完美运行。

虽然这实际上解决了问题,但我仍然不是TLS1.2。

client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12; 带回同样的错误。

【讨论】:

    【解决方案2】:

    您可以组合 Tls11 和 Tls12:

    client.SslProtocols = SslProtocols.Tls11 | SslProtocols.Tls12;
    

    【讨论】:

    • 但是mailkit/mimekit 不使用TLS1.2 连接服务器,只使用TLS1.1。
    • 这是 SslStream 的问题
    • 我也有同样的想法。
    猜你喜欢
    • 2019-04-26
    • 2020-11-05
    • 2017-12-15
    • 2018-04-18
    • 1970-01-01
    • 2021-01-30
    • 2020-01-17
    • 2018-03-07
    • 1970-01-01
    相关资源
    最近更新 更多