我試圖修復現有的.Net 2.0服務/應用程序。sslStream.AuthenticateAsServer忽略RemoteCertificateValidationCallback
它是一個接受SSL/TLS連接的TCP服務器。如預期的那樣通過443端口運行。它用於響應Yealink供應請求。你可以在手機中彈出網址,它會得到設置等(無論如何不重要)。
問題是,當舊的手機要求這項服務,它工作正常,但現在,由於新版本的手機, 這是行不通的。
這是fials代碼:
using (SslStream sslStream = new SslStream(tcpClient.GetStream(), false, new RemoteCertificateValidationCallback(AcceptAllCertifications)))
{
X509Certificate c = new X509Certificate2("cert.pfx", "XXXX");
sslStream.AuthenticateAsServer(c, false, SslProtocols.Tls, false);
// Process request etc
}
,這是 「AcceptAllCertifications」
private bool AcceptAllCertifications(object sender, X509Certificate certification, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
新手機導致應用程序產生的sslStream.AuthenticateAsServer錯誤(...) ;
System.componentmodel.win32exception:證書鏈由不受信任的頒發機構頒發給 。
是,「證書」他們在這裏提到我的證書(一個在服務器上)或他們的證書(一個從電話發送)?
我不知道(也不會有任何想法)有關用戶手機發送的證書的種類。
證書「cert.pfx」(我的證書)是從DigiCert購買的,(它是通配證書)。它是用密碼輸出的,噢,是的,我提到這個作品在所有常規瀏覽器和舊手機中都絕對沒問題......只是不是Yealink的新手機。
我該如何跳過整個身份驗證的事情,我只是想讓它工作,而不是公共系統?使用新手機時,「RemoteCertificateValidationCallback(AcceptAllCertifications)」永遠不會被調用,我用調試器跟蹤了它,完全跳過了它。
我在想也許手機不喜歡你向他們展示的服務器端證書並停止SSL握手。如果他們不知道DigiCert的根CA證書,可能會發生這種情況。你可以在服務器上使用Wireshark來分析SSL握手嗎?那會告訴你,哪一方會中斷握手。 – Christoph
其實......你現在就是。手機具有「僅接受可信證書」設置,默認情況下似乎已啓用。我現在可靠地創建和防止這個錯誤。當然,這是一個真正的痛苦,因爲我現在必須解除每個電話箱並切換此設置......多麼煩人! –
在這樣做之前,我會嘗試從這些電話獲取受信任根證書的列表。您可能能夠購買源自Yeaklink手機中已存在的可信根證書的證書。 – Christoph