У меня есть проект, где мне нужно отправить файл данных через веб-запрос. Нам нужно настроить двухстороннюю аутентификацию, также известную как взаимная аутентификация. Мы не уверены, нужен ли нам специальный сертификат или нет, но мы знаем, что он должен быть уровнем 3.Двухсторонняя аутентификация с использованием ssl в dotnet
У меня возникли проблемы с поиском образца кода для этого случая. Я не знаю, где добавить нашу информацию о сертификате. С помощью этого кода возникает ошибка Underlying connection is closed
, когда мы пытаемся прочитать поток ответов, а ServicePointManager.ServerCertificateValidationCallback
никогда не вызывается. Вот что у меня есть:
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
Любые советы или ссылки на блоги с образцом кода были бы замечательными. Спасибо.
У вас есть особое требование, не позволяет использовать WS-Security на SOAP? Между .NET и IIS, то есть WCF, это будет обрабатывать SSL-отказ и отказ от использования совместно используемого сертификата. Переключение на TLS и/или шифрование сообщений - это вопрос установки флажков. Нет необходимости в классе 3, тогда будет работать только класс 1 PKCS12 с закрытым ключом, без необходимости доверенного корня сети. – ssamuel