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