Ошибка при отправке POST из BPM. Не удалось установить доверительные отношения для защищенного канала SSL/TLS.

При отправке POST из BPM на внешний веб-сервис возникает ошибка. Сайт крутится на https. Сервис тоже на https.

System.Net.WebException: Базовое соединение закрыто: Не удалось установить доверительные отношения для защищенного канала SSL/TLS. ---> System.Security.Authentication.AuthenticationException: Удаленный сертификат недействителен согласно результатам проверки подлинности.
   в System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception)
   в System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
   в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   в System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result)
   в System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)
   в System.Net.ConnectStream.WriteHeaders(Boolean async)
   --- Конец трассировки внутреннего стека исключений ---
   в System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
   в System.Net.HttpWebRequest.GetRequestStream()
   в Terrasoft.Configuration.ContactLoad.ContactLoad.GetResponse()
   в Terrasoft.Configuration.ContactLoad.ContactLoad.GetContacts()
   в Terrasoft.Core.Process.UsrStartContactServiceMethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context)
   в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Когда отправляю из Postman, респонс приходит корректно. Возможно дело в настройках IIS?

 Вот код запроса : 

 

var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ServerCertificateValidationCallback = delegate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
httpWebRequest.Method = WebRequestMethods.Http.Post;
httpWebRequest.Timeout = 240000;
httpWebRequest.ContentType = "application/json";
httpWebRequest.ServicePoint.Expect100Continue = false;
httpWebRequest.ContentLength = data.Length;
Stream stream = httpWebRequest.GetRequestStream();
stream.Write(data, 0, data.Length);
stream.Close();
try
{
	var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
	using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
	{
		result = streamReader.ReadToEnd().ToString();
	}
}
catch (Exception ex)
{
	throw new Exception("Failed to get response. : " + ex.Message);
	return ex.Message;
}

 

Нравится

3 комментария

В postman проходит успешная проверка из-за того, что вы отключили проверку сертификата

https://stackoverflow.com/questions/777607/the-remote-certificate-is-invalid-according-to-the-validation-procedure-using

Варианты решения вопроса с ошибкой доступны в открытых источниках.

Сергей Кy6риш,

У меня в коде присутствует отключение проверки сертификата 

 

httpWebRequest.ServerCertificateValidationCallback = delegate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

 

Павел, на этом моменте как раз и акцентировал ваше внимание в предыдущем сообщении. Попробуйте включить проверку в postman, и посмотреть в сторону сертификата, предположительно, проблема в нем.

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