Chirag B
Ну, я не мог найти ни одной статьи с сквозным решением, поэтому мне пришлось двигаться вперед с помощью моего собственного метода исследований / проб и ошибок.
Чтобы попробовать, я купил бесплатный SSL-сертификат для своего домена (www.mydomain.com).
Примечание: Бесплатный SSL-сертификат на 90 дней доступен на сайте COMODO (кликните сюда[^Их команда поддержки великолепна и поможет вам устранить любые проблемы при установке и т. д. Вам также нужно будет связаться с вашим хостинг-провайдером, чтобы сгенерировать CSR (запрос на подписание сертификата) и предоставить его вам. Вы можете взять КСО на сайт comodo и отправить заказ на сертификат. Ваш сертификат скоро будет выслан вам по электронной почте.
Итак, я установил сертификат на свой сайт, обратившись в службу поддержки моего хостинг-провайдера. Я протестировал свой сайт и увидел заблокированный значок и информацию о сертификате. Пока все хорошо.
Теперь я хотел использовать файл сертификата клиента (mydomain.cer) для вызова веб-службы, размещенной на моем веб-сайте, которая будет вызываться из клиента windows. Я добавил следующий код.
string certPath = "C:\\MyProjects\\WinApp1\\mydomain.cer";
X509Certificate cert = X509Certificate.CreateFromCertFile(certPath);
Во время отладки я обнаружил следующую ошибку на 2-й строке.
CryptographicException: "значение индекса недопустимо."
Я тоже не смог найти ничего конкретного об ошибке ниже в google: (поэтому я связался со службой поддержки Comodo. Они прислали мне еще один файл с расширением .ЭЛТ вместо .ЦЭИ.
Итак, я применил следующие изменения к коду, и это сработало.
string certPath = "C:\\MyProjects\\WinApp1\\mydomain.CRT";
X509Certificate cert = X509Certificate.CreateFromCertFile(certPath);
Затем я добавил код для добавления сертификата и вызова метода веб-службы.
service.ClientCertificates.Add(cert);
string resultString = service.ServiceMethod(param1);
Однако на этот раз я получил следующую ошибку.
Системы.Веб.Услуги.Протоколы.SoapException: сервер не распознал значение HTTP-заголовка SOAPAction:
Итак, я обнаружил, что мне нужно обновить ссылку на веб-сервис в моем приложении winforms, возможно, bcoz веб-сайт теперь содержит SSL-сертификат и изменения и т. д.
Щелкните правой кнопкой мыши на веб-ссылке и нажмите кнопку "обновить веб-ссылку".
После применения изменений я смог вызвать веб-службу с помощью сертификата клиента, используя приведенный ниже код.
string certPath = "C:\\MyProjects\\WinApp1\\mydomain.CRT";
X509Certificate cert = X509Certificate.CreateFromCertFile(certPath);
service.ClientCertificates.Add(cert);
string resultString = service.ServiceMethod(param1);
Надеюсь, это кому-то поможет.