我正在使用公共根授權文件X509進行httpwebrequest。我只有公鑰,而不是私鑰。一切從控制檯應用程序正常工作,但它不能從一個asp.net應用程序工作。我收到錯誤消息:「底層連接已關閉:無法建立SSL/TLS安全通道的信任關係。」ASP.NET和底層連接已關閉:無法建立SSL/TLS安全通道的信任關係
禁用驗證的選項不是選項。
下面是代碼
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://xxxxxxx/gateway.aspx");
string post = "abcdef";
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
req.ContentLength = post.Length;
var cert = System.Security.Cryptography.X509Certificates.X509Certificate.CreateFromCertFile(@"c:\temp\root.cer");
req.ClientCertificates.Add(cert);
StreamWriter stOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
stOut.Write(post.ToString());
stOut.Close();
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
下面是從System.Net和System.Net套接字的系統日誌。
System.Net信息:0:[5928] SecureChannel#8106798 - 證書鏈無法構建到受信任的根授權中。
System.Net信息:0:[5928] SecureChannel#8106798 - 遠程證書被用戶驗證爲無效。
的System.Net.Sockets詳細:0:[5928]插孔#7486778 ::的Dispose()
System.Net錯誤:0:[5928]中的異常的HttpWebRequest#51319244 :: - 基礎連接已關閉:無法建立SSL/TLS安全通道的信任關係。
System.Net錯誤:0:[5928] HttpWebRequest中的異常#51319244 :: EndGetRequestStream - 底層連接已關閉:無法建立SSL/TLS安全通道的信任關係。
更多信息
如果我用這個代碼(從CodeGuru)
public static bool ValidateServerCertificate(object sender,
X509Certificate certificate, X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors ==
SslPolicyErrors.RemoteCertificateChainErrors) {
return false;
} else if (sslPolicyErrors ==
SslPolicyErrors.RemoteCertificateNameMismatch) {
System.Security.Policy.Zone z =
System.Security.Policy.Zone.CreateFromUrl
(((HttpWebRequest)sender).RequestUri.ToString());
if (z.SecurityZone ==
System.Security.SecurityZone.Intranet ||
z.SecurityZone ==
System.Security.SecurityZone.MyComputer) {
return true;
}
return false;
}
return true;
}
我最終得到的錯誤:
Remote Certificate Chain Error
的root.cer已添加到使用MMC管理單元的LOCALMACHINE商店此解決辦法。 我也嘗試使用winhttpcertcfg.exe無濟於事。由於我沒有私鑰,也沒有PFX文件。思考? – 2010-01-07 17:32:38
測試環境沒有使用SSL,因此沒問題。 我打算使用來自CA的Root認證,但這可能是問題的一部分。那麼我想, 服務器端的SSL設置有點不禮貌。 – 2010-01-07 17:59:45