Я делаю автоматическую 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);
}
}