Исходящий HTTP request c сертификатом

Всем привет, пытаюсь уже пару дней решить нерешаемое :) Есть api, на который ходит POST request c авторизацией сертификатом:

 

var userConnection = Get<UserConnection>("UserConnection");
 
// переменная для сохранения тестового результат
string httpResponseData = ""; 
 
//тащим из системной настройки с типом "бинарные данные" содержимое сертификата
byte[] _certByte = (byte[])Terrasoft.Core.Configuration.SysSettings.GetValue(userConnection, "UsrIpsmsCertificate"); 
 
//из него реконструируем сертификат
X509Certificate2 _certificate = new X509Certificate2(_certByte);
 
// создаем тело POST запроса
IpSMS _ipSMS = new IpSMS();
_ipSMS.action = "ping";
_ipSMS.baID = "populo";
string output = JsonConvert.SerializeObject(_ipSMS);
 
//инициализируем uri
string uri = "https://www.xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
 
//определяем протоколы ServicePointManager, не контролируем валидность сертификата
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
	| SecurityProtocolType.Tls11
	| SecurityProtocolType.Tls12
	| SecurityProtocolType.Ssl3;
	ServicePointManager.Expect100Continue = true;
	ServicePointManager.ServerCertificateValidationCallback +=
		(sender, cert, chain, error) => true;
 
//выполняем request
var httpWebRequest = (HttpWebRequest)WebRequest.Create(uri);
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "text/json";
httpWebRequest.ClientCertificates.Add(_certificate);
try {
	using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) {
		streamWriter.Write(output);
	}
	var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
	using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) {
		httpResponseData += streamReader.ReadToEnd().ToString();
	}
} catch (Exception ex) {
	httpResponseData += ex.InnerException == null ? ex.Message : ex.InnerException.Message;
}
 
//как-то выводим httpResponseData 

Результат:

The request was aborted: Could not create SSL/TLS secure channel.

 

на сервере-приемнике:

] AH02261: Re-negotiation handshake failed

 

вот честно скажу, с сертификатами опыта мало, но чисто визуально все ок. И в чем тогда косяк?! 

 

Нравится

1 комментарий

Дмитрий, добрый день!

Очень похоже на то, что вы используете Apache и его нужно обновить. Рекомендую ознакомится с этим обсуждением.

Показать все комментарии