为什么我的 X509Certificate 证书在通过 SMTP 发送时抛出错误 RemoteCertificateNameMismatch?

问题描述 投票:0回答:1

我有一台 Windows 2019 服务器,使用其 SMTP 服务器发送电子邮件。我们最近添加了 client.EnableSsl = true;到 SmtpClient。我向发送电子邮件的 Windows 服务添加了以下函数:

ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateCertificate);
...
public static bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    if (sslPolicyErrors == System.Net.Security.SslPolicyErrors.None)
    {
        return true;
    }
    if (certificate.GetCertHashString().ToLower() == CertificateThumbprint)
    {
        return true;
    }

    ...
}

sslPolicyErrors 包含值“RemoteCertificateNameMismatch”,当您查看“证书哈希”时,它是我们的证书...并不总是因为其他证书(不是我们的)会使用 sslPolicyErrors = None。

我实际上很惊讶在那里看到我们的证书,因为它是 Web 服务器的通配符证书。由于该网站是 IIS,我猜这就是它连接到 SMTP 的原因。无论如何,对于 IIS 下运行的各种 Web,该证书在 Web 服务器上运行得非常好。

我有一个解决方法,可以根据我们的证书指纹检查“证书哈希”并返回 true,但我确信有更合适的方法来验证证书。

任何人都可以告诉我我的证书发生了什么事以及如何正确修复它吗?非常感谢!

证书:

Archived: false
Extensions: {System.Security.Cryptography.X509Certificates.X509ExtensionCollection}
FriendlyName: ""
Handle: 0x00000259a9ca7f70
HasPrivateKey: false
Issuer: "CN=Go Daddy Secure Certificate Authority - G2, OU=http://certs.godaddy.com/repository/, O=\"GoDaddy.com, Inc.\", L=Scottsdale, S=Arizona, C=US"
IssuerName: {System.Security.Cryptography.X509Certificates.X500DistinguishedName}
NotAfter: {5/2/2024 7:05:24 AM}
NotBefore: {4/1/2023 8:01:11 AM}
PrivateKey: null
PublicKey: {System.Security.Cryptography.X509Certificates.PublicKey}
RawData: {byte[1677]}
RawDataMemory: "System.ReadOnlyMemory<Byte>[1677]"
SerialNumber: "00AEE89C39F9916FF2"
SerialNumberBytes: "System.ReadOnlyMemory<Byte>[9]"
SignatureAlgorithm: {System.Security.Cryptography.Oid}
Subject: "CN=*.servername.com"
SubjectName: {System.Security.Cryptography.X509Certificates.X500DistinguishedName}
Thumbprint: "402010..........373DDA30F455"
Version: 3
ssl iis smtp windows-services
1个回答
0
投票

史蒂芬确实应该在这里得到赞扬,这就是问题所在。我们的网络服务器有一个通配符证书。虽然我认为我们使用域名来连接 SMTP 服务器,但我们使用的是它的 IP,因为它们都在子网上。我确保我们的每台服务器的主机文件中都有域名,然后将所有服务器切换为使用 SMTP 服务器的域名。效果很好,像其他人一样获得认证。

© www.soinside.com 2019 - 2024. All rights reserved.