2010-01-07 88 views
8

我正在使用公共根授權文件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

回答

1

這聽起來像問題可能是什麼張貼在這link。 ASPNET工作進程需要證書名稱與服務器名稱匹配。有可以在測試環境中實施的解決方法。

生成證書的,你可以使用一個名爲SelfSSL.exe與如命令免費程序:

SelfSSL.exe /T /N:CN=localhost /V:999 /Q(其中 「localhost」 的是證書名稱)

和:

winHTTPCertCfg.exe -g -c local_machine\my -s localhost -a Administrators(授予管理員訪問證書)

+0

的root.cer已添加到使用MMC管理單元的LOCALMACHINE商店此解決辦法。 我也嘗試使用winhttpcertcfg.exe無濟於事。由於我沒有私鑰,也沒有PFX文件。思考? – 2010-01-07 17:32:38

+0

測試環境沒有使用SSL,因此沒問題。 我打算使用來自CA的Root認證,但這可能是問題的一部分。那麼我想, 服務器端的SSL設置有點不禮貌。 – 2010-01-07 17:59:45

相關問題