2010-12-14 32 views
7

Ho un progetto in cui ho bisogno di inviare un file di dati attraverso una richiesta web. Dobbiamo impostare l'autenticazione a due vie, nota anche come autenticazione reciproca. Non siamo sicuri se abbiamo bisogno di un CERT speciale o no, ma sappiamo che ha bisogno di essere di livello 3.L'autenticazione a due vie tramite SSL in dotnet

Sto avendo difficoltà a trovare il codice di esempio per questo caso. Non so dove aggiungere le nostre informazioni cert. Con questo codice di un errore di Underlying connection is closed viene generata quando si cerca di leggere il flusso di risposta e ServicePointManager.ServerCertificateValidationCallback non viene mai chiamato. Ecco cosa ho:

ServicePointManager.ServerCertificateValidationCallback = New Security.RemoteCertificateValidationCallback(AddressOf MyCertValidationCb) 
      httpReq = CType(System.Net.HttpWebRequest.Create(url), HttpWebRequest) 
      For Each cert As String In certs 
       X509cert = X509Certificate2.CreateFromCertFile(cert) 
       X509cert2 = New X509Certificate2(X509cert) 
       httpReq.ClientCertificates.Add(X509cert2) 
      Next 
      httpReq.Method = "POST"  ' Post method 
      httpReq.ContentType = "text/xml"    ' content type 

      ' Wrap the request stream with a text-based writer 
      writer = New StreamWriter(httpReq.GetRequestStream()) 
      ' Write the XML text into the stream 
      reader = New StreamReader(filename.Name) 
      ret = reader.ReadToEnd() 
      reader.Close() 
      ' Send the data to the webserver 
      writer.WriteLine(ret) 
      writer.Close() 
      ' Wait for response 
      Dim httpRsp As System.Net.HttpWebResponse = CType(httpReq.GetResponse(), HttpWebResponse) 
      sr = New StreamReader(httpRsp.GetResponseStream) 
      responseText = sr.ReadToEnd 

      If httpReq IsNot Nothing Then 
       httpReq.GetRequestStream().Close() 
      End If 
      If httpRsp IsNot Nothing Then 
       httpRsp.GetResponseStream().Close() 
      End If 

Qualsiasi suggerimento o collegamento a blog con codice di esempio sarebbe fantastico. Grazie.

+2

Avete un requisito particolare che impedisce di utilizzare WS-Security su SOAP? Tra .NET e IIS, ovvero WCF, questo gestirà il trasporto e il ripudio di SSL utilizzando un cert condiviso. Passare al TLS e/o alla crittografia dei messaggi è una questione di impostazione dei flag. Non c'è bisogno di una classe 3 quindi, solo una PKCS12 di classe 1, con chiave privata, senza bisogno di una catena di fiducia, funzionerebbe. – ssamuel

risposta

Problemi correlati