繁体   English   中英

电子邮件服务器上的自签名证书

[英]Self Sign certificate on email server

我正在使用测试电子邮件服务器在SSL环境中测试我的代码。 我使用以下命令创建了一个自签名的根和一个签名的证书。

在此处输入图片说明

在此处输入图片说明

我使用SmtpClient编写了一个简单的测试程序来发送测试电子邮件,代码如下:

                System.Net.Mail.MailMessage mm = new System.Net.Mail.MailMessage(tFrom.Text, tTo.Text);

                mm.Subject = tSubject.Text;
                mm.Body = tBody.Text;

                SmtpClient client = new SmtpClient(tSmtp.Text, Convert.ToInt32(tPort.Text));
                client.UseDefaultCredentials = false;

                if (!String.IsNullOrEmpty(tPass.Text) && !String.IsNullOrEmpty(tUser.Text))
                {
                    client.EnableSsl = true;
                    client.Credentials = new NetworkCredential(tUser.Text, tPass.Text);
                }
                client.SendCompleted += new SendCompletedEventHandler(client_SendCompleted);
                client.SendAsync(mm, null);

在我的服务器(Smtp4Dev)上,我已将其设置为接受TLS连接

在此处输入图片说明

在我的客户端计算机上,我有以下内容:

在此处输入图片说明

但是,每当我发送电子邮件时,都会在服务器日志中不断出现以下错误:

 220 Ready to start TLS
 Session ended abnormally.
 System.NotSupportedException: The server mode SSL must use a certificate with the associated private key.

如果我在没有SSL的情况下尝试此操作,则可以收到我的电子邮件。 我试图在“个人和受信任的根证书”下添加证书,但是仍然会出现相同的错误。 我对SSL非常陌生,因此希望您能为我指明正确的方向。

看一下实现ServerCertificateValidationCallback委托。 在使用SmtpClient之前,请尝试以下类似操作:

System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate { return true; };

在开发环境中,返回true并因此接受所有证书只是一个好主意,但是您可以扩展委托实现以检查其他属性,而不仅仅是盲目地为所有内容返回true。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM