在无法让Papercut和SMTP 4Dev与StartTLS一起工作之后,我决定迅速地将我自己的基本“假”SMTP服务器组合在一起;我还启动了一个快速的SMTP客户端来测试服务器本身。标准的SMTP运行得很好,但是我很难在客户端请求后成功地初始化一个安全的流。
- 我正在使用IIS生成的自签名证书
- 未过期
- 它也存在于我的个人和受信任的CA证书存储区中
- 服务器已设置为忽略CRL检查
- 服务器和客户端都在同一台计算机上运行,并且通过两个Visual Studio示例并发运行。
找到证书,服务器尝试使用该证书进行身份验证
伺服器
private void TlsHandshake(string certSerialNo, SslStream stream)
{
X509Store certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadOnly);
X509Certificate2 cert = certStore.Certificates.Find(X509FindType.FindBySerialNumber, certSerialNo, true)[0];
stream.AuthenticateAsServer(cert, false, false);
}
委托人
然而,一旦它这样做,客户端拒绝它,并抛出一个ex
static void Main(string[] args)
{
Console.WriteLine("Starting up...");
using (SmtpClient client = new SmtpClient("127.0.0.1", 25))
{
client.EnableSsl = true;
client.Send("test@from.com", "test@to.com", "asubject", "abody");
}
}
我已经搜索了很多解决方案,帮助其他人在类似的情况下,但都来了短。这是最后一步的应用程序必须采取,所以任何帮助将不胜感激:)
1条答案
按热度按时间qkf9rpyu1#
您正在连接到
127.0.0.1
,我想它与证书中的名称不匹配(证书中的名称需要在“主题备用名称”字段中)。您可能希望以计算机名称获取证书,然后使用计算机名称而不是
127.0.0.1
进行连接。连接到localhost
* 可能 * 有效,如果它被自动转换为计算机名称的话。此外,在受信任的根目录中放置自证书并不总是有帮助:许多证书验证器要求证书由另一个根签署。2所以你最好的办法是从私有或公共证书颁发机构为机器获得一个合适的证书。