Отправить Отправить запрос на обслуживание с использованием сертификата - PullRequest
0 голосов
/ 13 января 2020

Я делаю автоматическую c загрузку файла из сервиса. Некоторые файлы можно загрузить с помощью API publi c, а некоторые - с помощью частного API. Частный API хочет использовать сертификаты от меня. На сайте разработчика сайта есть программное обеспечение, которое выполняет те же манипуляции, но нет автоматической загрузки c. И это программное обеспечение требует в настройках указать слепок сертификата (34.10-2012), который идет с ним. Также для частных функций требуется указать личный сертификат, который у меня есть.

В моей программе я получаю персональный сертификат и отправляю запрос, но служба отвечает Internal Server Error (500). Насколько я понимаю, вы также должны как-то указать слепок сертификата root, поскольку для этого требуется их программное обеспечение. Должен ли клиент использовать 2 сертификата при отправке? Я не понимаю. Ранее не пользовался сертификатами. Поэтому испытывают трудности

public async Task CallWebService()
{
    var _url = "http://xxxxxx.ru:7081/PersonalApi/PersonalApiService.svc/ByCertificate";
    var _action =  "http://xxxxx.ru/soft/dssi/XXXX/XXX/Web/Api/PersonalApi/IPersonalApiService/TestAuthentication";

    XmlDocument soapEnvelopeXml = CreateSoapEnvelope();
    HttpWebRequest webRequest = CreateWebRequest(_url, _action);

    var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
    store.Open(OpenFlags.ReadOnly);
    X509CertificateCollection certs = store.Certificates.Find(X509FindType.FindBySerialNumber, "2C1EC4D41005000071B0", false);
    webRequest.ClientCertificates = certs;
    InsertSoapEnvelopeIntoWebRequest(soapEnvelopeXml, webRequest);
    try
    {
        var response = await webRequest.GetResponseAsync();
        string soapResult;
        using (StreamReader rd = new StreamReader(response.GetResponseStream()))
        {
            soapResult = rd.ReadToEnd();
        }
        Console.Write(soapResult);
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}
...