2010-12-14 21 views
7

Mam projekt, w którym muszę wysłać plik danych za pomocą żądania internetowego. Musimy skonfigurować uwierzytelnianie dwukierunkowe, znane również jako wzajemne uwierzytelnianie. Nie jesteśmy pewni, czy potrzebujemy specjalnego certyfikatu, czy nie, ale wiemy, że musi to być poziom 3.Uwierzytelnianie dwukierunkowe przy użyciu protokołu SSL w Dotnet

Mam problem ze znalezieniem przykładowego kodu dla tej sprawy. Nie wiem, gdzie dodać informacje o naszym certyfikacie. W tym kodzie jest zgłaszany błąd Underlying connection is closed, gdy próbujemy odczytać strumień odpowiedzi i ServicePointManager.ServerCertificateValidationCallback nigdy nie jest wywoływany. Oto, co mam:

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 

Wszelkie porady lub linki do blogów z przykładowym kodem byłyby świetne. Dzięki.

+2

Czy masz szczególne wymagania, które zapobiega użyciu WS-Security na mydło? Pomiędzy .NET i IIS, tj. WCF, działałoby to na transport SSL i odrzucanie przy użyciu współdzielonego certyfikatu. Przełączanie na TLS i/lub szyfrowanie wiadomości jest kwestią ustawiania flag. Nie ma potrzeby stosowania klasy 3, a jedynie PKCS12 klasy 1, z kluczem prywatnym, bez potrzeby posiadania zaufanego łańcucha głównego, który działałby. – ssamuel

Odpowiedz

Powiązane problemy