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.
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