在未能讓 Papercut 和 SMTP4Dev 與 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);
}
客戶
但是,一旦它這樣做,客戶就會拒絕它并拋出一個前任
static void Main(string[] args)
{
Console.WriteLine("Starting up...");
using (SmtpClient client = new SmtpClient("127.0.0.1", 25))
{
client.EnableSsl = true;
client.Send("[email protected]", "[email protected]", "asubject", "abody");
}
}
我已經瀏覽了很多解決方案,這些解決方案可以幫助處于類似情況的其他人,但都不夠用。這是應用程式必須采取的最后一步,因此我們將不勝感激任何幫助 :)
uj5u.com熱心網友回復:
您正在連接的127.0.0.1我認為與證書中的名稱不匹配(需要在“主題備用名稱”欄位中)。
您可能希望以機器名稱獲取證書,然后使用機器名稱而不是127.0.0.1. 連接到localhost 可能會起作用,如果它被自動翻譯為機器名稱。
此外,將自我證書放在受信任的根中并不總是有幫助:許多證書驗證器要求證書由另一個根簽名。因此,您最好的選擇是從私人或公共證書頒發機構獲得適當的機器證書。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/506685.html
