C# HTTPS Post с сертификатом - PullRequest
0 голосов
/ 05 февраля 2020

Мне нужна помощь в настройке HTTP Post в C# с сертификатом.

Я получаю сообщение об ошибке:

"The underlying connection was closed: An unexpected error occurred on a send'. Спасибо. Рамка Net составляет 4,5

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.ServerCertificateValidationCallback = TrustCertificate;
byte[] bytes = new ASCIIEncoding().GetBytes(transaction);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlString);
request.ClientCertificates.Add(new X509Certificate());
request.Method = "POST";
string str = Convert.ToBase64String(Encoding.Default.GetBytes(username + ":" + pwd));
request.Headers["Authorization"] = "Basic " + str;
request.ContentType = "text/xml";
request.ContentLength = bytes.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string str2 = reader.ReadToEnd();
response.Close();
reader.Close();
return str2;

1 Ответ

0 голосов
/ 06 февраля 2020

Ошибка может иметь несколько причин. Вот мой список для диагностики.

  1. Используйте браузер (который использует Windows Хранилище сертификатов - IE или Chroms) для GET запросов или Fiddler для все остальные HTTP-глаголы (POST, ...) для вызова конечной точки.
  2. Убедитесь, что сертификат сервера действителен (NotBefore & NotAfter) и не отозван. Браузер покажет ошибки и предоставит подробную информацию.
  3. Проверьте версию TLS / SSL на соответствие клиента и сервера. IISCrypto (название сбивает с толку) показывает конфигурацию платформы (Windows SCHANNEL) как на клиенте, так и на сервере. Кроме того, есть хороший скрипт PowerShell , который открывает соединения со всеми версиями TLS / SSL. Если у вас нет доступа к серверу, но он общедоступен, вы проверяете, какие версии TLS поддерживаются, используя https://www.ssllabs.com/ssltest/analyze.html
  4. Последнее, но не менее важное: убедитесь, что клиент и Сервер может договориться о наборе шифров. IISCrypto и https://www.ssllabs.com/ssltest/analyze.html могут также отображать поддерживаемые комплекты шифров.

РЕДАКТИРОВАТЬ

Проверка с помощью firefox, сертификат в порядке, не самоподписанный (DigiCert): enter image description here

Выполнение запроса на получение по указанному URL с TLS 1.2:

try {
  var urlString = "https://www.viewmyrecord.com/";
  ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
  var request = (HttpWebRequest) WebRequest.Create(urlString);
  request.ClientCertificates.Add(new X509Certificate());
  request.Method = "GET";

  using (var response = (HttpWebResponse) request.GetResponse()) {
    Console.WriteLine(response.StatusCode);
  }
} catch (Exception ex) {
  Console.ForegroundColor = ConsoleColor.Red;
  Console.WriteLine(ex.ToString());
  Console.ResetColor();
}

Работает отсюда:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...