2012-09-07 25 views
9

Possible Duplicate:
The request was aborted: Could not create SSL/TLS secure channelistek iptal edildi: Ben bir istemci tarafı sertifikasına sahip bir http isteği göndermek çalışıyorum

SSL/TLS güvenli kanalı oluşturulamadı. Dosya, bu durumda bir .p12 dosya. Ancak, responseStream = httpRequest.GetRequestStream(); hattına ulaştığında, WebException: System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.

bunu, uygulama havuzu kimliğinin "LocalSystem" olduğu IIS7.5'te (Windows 7'de) hata ayıklaması yapıyorum.

Bu sorunu nasıl çözebilirim?

 System.IO.Stream responseStream = null; 
     string errorString = string.Empty; 
     ; 
     string postData = string.Empty; 
     HttpWebRequest httpRequest = null; 
     System.Text.Encoding Encoding = new System.Text.UTF8Encoding(); 
     try 
     { 
      XmlDocument orderXml = new XmlDocument(); 
      orderXml.Load(@"c:\xmlfile.xml"); 
      postData = orderXml.InnerXml; 

      byte[] byte1 = Encoding.GetBytes(postData); 

      httpRequest = (HttpWebRequest)WebRequest.Create("https://testurl.com/SOAP_v1_0/"); 
      httpRequest.Method = "POST"; 
      httpRequest.Timeout = 9000; 
      httpRequest.KeepAlive = false; 
      httpRequest.ContentType = "text/xml; charset=" + "utf-8"; 
      httpRequest.ContentLength = byte1.Length; 

      X509Certificate2 certificate = new X509Certificate2(@"c:\file.p12", "password", X509KeyStorageFlags.Exportable); 
      X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 

      try 
      { 
       store.Open(OpenFlags.ReadWrite); 

       if (!store.Certificates.Contains(certificate)) 
       { 
        store.Add(certificate); 
       } 

       int indexOfCertificate = store.Certificates.IndexOf(certificate); 
       certificate = store.Certificates[indexOfCertificate]; 
      } 

      finally 
      { 
       store.Close(); 
      } 

      httpRequest.ClientCertificates.Add(certificate); 

      responseStream = httpRequest.GetRequestStream(); 

      responseStream.Write(byte1, 0, byte1.Length); 
     } 
     catch (WebException webExcp) 
     { 
      errorString += "Error message: " + webExcp.Message; 

      // Get the WebException status code. 
      WebExceptionStatus status = webExcp.Status; 

      if (status == WebExceptionStatus.ProtocolError) 
      { 
       // Get HttpWebResponse so that you can check the HTTP status code. 
       HttpWebResponse httpResponse = (HttpWebResponse)webExcp.Response; 
       errorString += "; The server returned protocol error " + httpResponse.StatusCode + " - " + httpResponse.StatusCode; 
       httpResponse.Close(); 
      } 
     } 
     catch (Exception e) 
     { 
      errorString += "Error message: " + e.Message; 
     } 
     finally 
     { 
      if (responseStream != null) 
      { 
       responseStream.Close(); 
      } 
     } 
    } 

iz ile çalıştırırken bu hatayı specifing çizgilerdir log: Uygulamanız için bir system.net günlüğü oluşturmak için gereken

System.Net Information: 0 : [4968] SecureChannel#2399524 - Certificate is of type X509Certificate2 and contains the private key. 

System.Net Information: 0 : [4968] AcquireCredentialsHandle(package = Microsoft Unified Security Protocol Provider, intent = Outbound, scc  = System.Net.SecureCredential) 

System.Net Error: 0 : [4968] AcquireCredentialsHandle() failed with error 0X8009030D. 

System.Net Information: 0 : [4968] AcquireCredentialsHandle(package = Microsoft Unified Security Protocol Provider, intent = Outbound, scc  = System.Net.SecureCredential) 

System.Net Error: 0 : [4968] AcquireCredentialsHandle() failed with error 0X8009030D. 
System.Net.Sockets Verbose: 0 : [4968] Socket#59311937::Dispose() 

System.Net Error: 0 : [4968] Exception in the HttpWebRequest#50160154:: - The request was aborted: Could not create SSL/TLS secure channel. 

System.Net Error: 0 : [4968] Exception in the HttpWebRequest#50160154::EndGetRequestStream - The request was aborted: Could not create SSL/TLS secure channel. 
+0

Bir tarayıcıyla aynı URL'ye başarılı bir şekilde gidebilir misiniz? Bu, SSL/TLS oturumunu başarıyla kurar mı? – Richard

+0

Hayır "Internet Explorer web sayfasını görüntüleyemiyor" – Rutger

+0

Böylece, hata sayfasındaki bağlantıya bakarak ayrıntılara bakın. SSL/TLS kanalının neden oluşturulamayacağını bilmeniz gerekir. Bu bilgiler olmadan, istemci ve sunucudaki yapılandırma ayarlarında tahmin ediyoruz. – Richard

cevap

31

. Bir myapp.exe.config yapılandırma dosyası oluşturmanız ve içine aşağıdakileri eklemeniz gerekecek.

<?xml version="1.0" encoding="UTF-8"?> 

<configuration> 
    <system.diagnostics> 
     <trace autoflush="true" /> 
     <sources> 
      <source name="System.Net"> 
       <listeners> 
        <add name="System.Net" /> 
       </listeners> 
      </source> 
      <source name="System.Net.Sockets"> 
       <listeners> 
        <add name="System.Net" /> 
       </listeners> 
      </source> 
      <source name="System.Net.Cache"> 
       <listeners> 
        <add name="System.Net" /> 
       </listeners> 
      </source> 
     </sources> 
     <sharedListeners> 
      <add 
       name="System.Net" 
       type="System.Diagnostics.TextWriterTraceListener" 
       initializeData="System.Net.trace.log" 
      /> 
     </sharedListeners> 
     <switches> 
      <add name="System.Net" value="Verbose" /> 
      <add name="System.Net.Sockets" value="Verbose" /> 
      <add name="System.Net.Cache" value="Verbose" /> 
     </switches> 
    </system.diagnostics> 
</configuration> 

Bu yapılandırma dosyası ile çalıştırırsanız, bu System.Net.Trace.log adında bir günlük dosyası oluşturur. Bu dosyanın neden başarısız olduğuna dair daha fazla ayrıntıya sahip olacak.

+0

trace günlüğünün hata parçasıyla ilgili olarak güncelleştirilmiş soru – Rutger

+0

Daha ayrıntılı hata iletileri oluşturmadıysanız, 'traceOutputOptions =" ​​DateTime, ProcessId, ThreadId, Callstack "' 'sharedListener' System.Net' öznitelikleri olarak ekleyin. Şunun gibi: '< name = "System.Net" type = "System.Diagnostics.TextWriterTraceListener" traceOutputOptions = "DateTime, Processıd, ThreadID CallStack" TextWriterTraceListener = "System.Net.Trace.log" /add > ' – Ogglas

İlgili konular