in Darabonba/Utils/HttpClientUtils.cs [44:135]
internal static HttpClient CreatHttpClient(Dictionary<string, object> options)
{
HttpClient httpClient;
string proxyUrl = options.Get("httpProxy") != null ? options.Get("httpProxy").ToSafeString() : options.Get("httpsProxy").ToSafeString();
bool ignoreSSL = options.Get("ignoreSSL").ToSafeBool(false);
#if NET45
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
| SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12;
var handler = new WebRequestHandler();
if(!string.IsNullOrWhiteSpace(proxyUrl))
{
handler.Proxy = new WebProxy(new Uri(proxyUrl));
}
else
{
handler.UseProxy = false;
}
if(ignoreSSL)
{
handler.ServerCertificateValidationCallback = delegate { return true; };
}
else
{
string ca = options.Get("ca") != null ? options.Get("ca").ToSafeString() : options.Get("ca").ToSafeString();
if (!string.IsNullOrWhiteSpace(ca))
{
handler.ServerCertificateValidationCallback = (message, cert, chain, sslPolicyErrors) =>
{
var collection = new X509Certificate2Collection();
byte[] certBytes = Encoding.UTF8.GetBytes(ca);
X509Certificate2 cacert = new X509Certificate2(certBytes);
collection.Add(cacert);
if (ServerCertificateCustomValidationCallback != null)
{
return ServerCertificateCustomValidationCallback(message, collection, cert, chain, sslPolicyErrors);
}
return CertificateValidationCallBack(message, collection, cert, chain, sslPolicyErrors);
};
}
}
httpClient = new HttpClient(handler);
#else
HttpClientHandler httpClientHandler = new HttpClientHandler();
if (!string.IsNullOrWhiteSpace(proxyUrl))
{
httpClientHandler.Proxy = new WebProxy(new Uri(proxyUrl));
}
else
{
httpClientHandler.UseProxy = false;
}
if (ignoreSSL)
{
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, error) => true;
}
else
{
string ca = options.Get("ca") != null ? options.Get("ca").ToSafeString() : options.Get("ca").ToSafeString();
if(!string.IsNullOrWhiteSpace(ca))
{
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, sslPolicyErrors) =>
{
var collection = new X509Certificate2Collection();
byte[] certBytes = Encoding.UTF8.GetBytes(ca);
X509Certificate2 cacert = new X509Certificate2(certBytes);
collection.Add(cacert);
if (ServerCertificateCustomValidationCallback != null)
{
return ServerCertificateCustomValidationCallback(message, collection, cert, chain, sslPolicyErrors);
}
return CertificateValidationCallBack(message, collection, cert, chain, sslPolicyErrors);
};
}
}
httpClient = new HttpClient(httpClientHandler);
#endif
return httpClient;
}