Как сервис может иногда получать ошибки SSL / TLS - PullRequest
0 голосов
/ 04 декабря 2018

Эта служба Windows работает каждые 5 секунд или около того, что позволяет подключаться и получать данные в 99% случаев.Существует некоторая проблема, которая еще не решена, когда служба начнет отказывать.Мы получим эту ошибку обратно в течение нескольких минут / часов, а затем служба, похоже, исправит себя и продолжит получать данные.

System.Net.WebException: запрос был прерван: не удалось создать безопасный канал SSL / TLS,at System.Net.HttpWebRequest.GetResponse ()

Мне интересно, есть ли в приведенном ниже коде что-либо, способное вызвать такое поведение.Если нет, я предполагаю, что это какая-то проблема с сервером, который мы проверяем.Любая помощь будет оценена.

ServicePointManager.SecurityProtocol.SecurityProtocolType.Tls12;
ServicePointManager.Expect100Continue = false;

public abstract class QueryBase
{
    private const string URL = "https://whatever.com/xml/query";
    private readonly X509Certificate certificate;
    public static Cookie Session { get; set; }
    private readonly Regex sessionReg = new Regex("Session=(\\w+)", RegexOptions.Compiled);
    protected QueryBase(X509Certificate cert)
    {
        certificate = cert;
    }

    protected abstract string GetPostData();

    public string SubmitQuery()
    {
        string data;

        var request = CreateRequest();

        using (var response = (HttpWebResponse) request.GetResponse())
        {
            if (Session == null)
            {
                for (var i = 0; i < response.Headers.Count; i++)
                {
                    var name = response.Headers.GetKey(i);
                    if (name != "Set-Cookie") continue;
                    var value = response.Headers.Get(i);
                    var match = sessionReg.Match(value);
                    if (match.Captures.Count <= 0) continue;
                    Session = new Cookie("Session", match.Groups[1].Value, "/", "whatever.com");
                    break;
                }
            }
            using (var responseStream = response.GetResponseStream())
            {
                using (var reader = new StreamReader(responseStream))
                {
                    data = reader.ReadToEnd();
                }
            }
        }
        return data;
    }

    private HttpWebRequest CreateRequest()
    {
        var request = (HttpWebRequest) WebRequest.Create(URL);
        request.ContentType = "text/xml";
        request.Method = "POST";
        request.UserAgent = "NOTABROWSER";

        request.ClientCertificates.Add(certificate);

        if (Session != null)
        {
            request.CookieContainer = new CookieContainer();
            request.CookieContainer.Add(Session);
        }

        var xml = GetPostData();

        var xmlBytes = Encoding.ASCII.GetBytes(xml);
        request.ContentLength = xmlBytes.Length;

        var s = request.GetRequestStream();
        s.Write(xmlBytes, 0, xmlBytes.Length);

        return request;
    }
}

1 Ответ

0 голосов
/ 04 декабря 2018

Вероятно, это сервер, но может быть сертификатом клиента

«Не удалось создать безопасный канал SSL / TSL» означает, что соединение не устанавливается.Это означает, что вы не передаете фактический запрос или не делаете что-либо с файлами cookie.Сертификат клиента будет использоваться при установлении соединения, поэтому, если сертификат клиента изменяется по какой-либо причине, это может быть оно.

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