Solo en azul: no se pudo crear un canal seguro SSL / TLS
Ejecuto una aplicación en Azure Application Standard: 1 Small plan. El marco es 4.6.1
Esta aplicación está llamando a una API segura SSL. El SSL es publicado por StartCom Class 1 DV Server CA, mi navegador local me dice que el certificado es válido.
Si ejecuto la aplicación en mi máquina local, todo funciona. Sin embargo, cuando se implementa en azul, falla con el siguiente error:
System.Net.Http.HttpRequestException: se produjo un error al enviar la solicitud. ---> System.Net.WebException: la solicitud fue cancelada: no se pudo crear un canal seguro SSL / TLS.
en System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult)
en System.Net.Http.HttpClientHandler.GetResponseCallback (IAsyncResult ar)
--- Fin del rastro interno de la pila de excepciones ---
en System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tarea de tarea)
en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tarea de tarea)
El código:
public async Task<List<QutationOverview>> GetAll(string url, DateTime lastActionDate)
{
var result = string.Empty;
try
{
var userName = await _settingManager.GetSettingValueAsync("API.UserName");
var password = await _settingManager.GetSettingValueAsync("API.Password");
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls |
SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
ServicePointManager
.ServerCertificateValidationCallback +=
(sender, cert, chain, sslPolicyErrors) => true;
//Add date filter
//Always request qutations where the last action took place >= Yesterday
var requestUrl =
$"GetALL/?last_action_date={lastActionDate.AddDays(-1).ToString("yyyy-MM-dd")}&format=json";
var baseAddress = new Uri(url);
var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{userName}:{password}"));
Logger.InfoFormat("GetAllQuotationsAsync for url {0}{1}", url, requestUrl);
using (var httpClient = new HttpClient {BaseAddress = baseAddress})
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);
using (var response = await httpClient.GetAsync(requestUrl))
{
result = await response.Content.ReadAsStringAsync();
Logger.Info(result);
}
}
}
catch (Exception ex)
{
Logger.ErrorFormat("GetAllQuotationsAsync {0}: {1}", url, ex);
}
var data = JsonConvert.DeserializeObject<List<QutationOverview>>(result);
return data;
}
Como puede ver, omito la validación del certificado y agregué los protocolos de seguridad.
Sin embargo, la solicitud sigue fallando.
Aquí está la respuesta calculadahttp://textuploader.com/5ers0
¿Tienes alguna idea de cómo hacer que funcione en Azure?