【问题标题】:Unexpected " The remote certificate is invalid according to the validation procedure."意外“根据验证程序,远程证书无效。”
【发布时间】:2017-02-16 02:22:17
【问题描述】:

我正在尝试通过 Mailkit 从 .NetCore/Ubuntu 机器连接到 SMTP 服务器。

我正在尝试在 SSL 关闭的情况下连接到服务器上的端口 25。

邮件服务器是本地局域网上的 Windows 服务器,可以在与问题 Ubuntu 机器上使用的设置相同的其他机器上正常工作。

用于连接的代码如下:

            using (var client = new SmtpClient())
            {
                client.Connect("smtp.mydomain.com", 25,false);
                client.Authenticate(username, password);
                client.Send(emailMessage);
                client.Disconnect(true);
            }

但是,这会在带有错误消息的 .Connect 行之后立即引发异常 "根据验证程序,远程证书无效。"

我很惊讶原版 25 端口完全涉及证书。

有人知道发生了什么吗?

【问题讨论】:

    标签: smtp certificate asp.net-core mailkit


    【解决方案1】:

    服务器可能正在启用 TLS 作为 SMTP 的一部分。这很常见,它是 STARTTLS 动词。

    如果这适用于其他 Windows 机器,您是否在 AD 中?如果是这样,AD 上可能有一个 CA 颁发证书,这些证书通过组策略自动信任。所以你也需要configure OpenSSL on your Ubuntu machine to trust that CA

    或者你可以直接说操,然后告诉 StmpClient 忽略安全性

    client.EnableSsl = true;
    

    【讨论】:

    • 感谢您的回复。我可以通过 SecureSocketOptions.None 解决这个问题;作为 Connect() 方法的第三个参数。
    【解决方案2】:

    您在端口 25 上看到 SSL 证书的原因是服务器在该端口上提供了 starttls。要找出使用了哪个 SSL 证书,您可以通过 OpenSSL 使用here 中提到的以下方式:

    openssl s_client -connect exchange01.int.contoso.com:25 -starttls smtp

    这里使用的这个 SSL 证书可能是自签名的,那么您可以将其替换为受信任的证书(如果可以的话),或者您可以信任自签名的证书。

    【讨论】:

      猜你喜欢
      • 2011-03-28
      • 2016-11-28
      • 1970-01-01
      • 2013-08-08
      • 2012-07-20
      • 2015-03-17
      • 2021-05-30
      相关资源
      最近更新 更多