Chirag B Ответов: 2

Как реализовать веб-сервис (asmx) из приложения winforms с помощью проверки сертификата клиента


У меня есть веб-служба (asmx), которая вызывается клиентским приложением winforms. В настоящее время я использую общий SSL с веб-сервисом, который вызывается клиентом winforms, но не уверен, насколько это безопасно. Но я хотел бы реализовать безопасность SSL-сертификата для проверки клиентских запросов, которые будут поступать из приложения Winforms, установленного в расположении клиента.

Я ищу некоторые хорошие рекомендации/ссылки, которые могут дать мне полную информацию о такой реализации для веб-службы как на стороне клиента (приложение winforms - как использовать сертификат и вызывать веб-службы), так и на стороне сервера (установить сертификат на сервер IIS и т. д.). Может ли кто-нибудь помочь мне предоставить правильные ссылки/детали для такой реализации?

Примечание: Я хотел бы использовать последние сервисы WCF для такой реализации и могу пойти с ним, если это достаточно просто. Однако, если это не просто и из-за временных ограничений, я хочу продолжать использовать веб-сервисы asmx на основе 2.0 в качестве первого приоритета.

- .NET Framework версии 4.0 используется в веб-приложении, где размещается веб-служба
- Обязанности и достижения клиентское приложение, использует .Framework версии 3.5.

2 Ответов

Рейтинг:
11

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);


Надеюсь, это кому-то поможет.


Рейтинг:
1

Sergey Alexandrovich Kryukov

Пожалуйста, смотрите: http://technet.microsoft.com/en-us/library/cc732996%28v=WS.10%29.aspx[^].

—СА


[no name]

Спасибо за ссылку, но я ищу сквозное решение с некоторыми фрагментами кода и скриншотами. Есть ли они?

Sergey Alexandrovich Kryukov

Я не уверен. Извините, но настоящее сквозное решение-это то, которое вы создаете как разработчик программного обеспечения. Вот тут-то и помогает наш форум...
—СА

[no name]

Я купил SSL сертификат для своего домена (www.mydomain.com) и установил сертификат на мой хостинг-сайт. Теперь я пытаюсь добавить файл сертификата клиента (mydomain. cer) при вызове веб-службы из клиента windows, но выдает мне CryptographicException: "значение индекса недопустимо". в следующей строке.


строка certPath = "C:\\MyProjects\\WinApp1\\mydomain.cer";
X509Certificate cert = X509Certificate.CreateFromCertFile(certPath);

Может кто-нибудь посоветовать?

[no name]

Обновление: я использовал сертификат Comodo InstantSSL и связался с ними. Они прислали мне еще несколько файлов с расширением crt. Итак, вместо использования .Файл CER, когда я использовал файл. CRT, следующий код работал, и я смог создать сертификат из файла.

строка certPath = "C:\\MyProjects\\WinApp1\\mydomain.CRT";
X509Certificate cert = X509Certificate.CreateFromCertFile(certPath);

Далее, вызывая мой метод веб-службы, я получаю следующую ошибку.

Системы.Веб.Услуги.Протоколы.SoapException: сервер не распознал значение HTTP-заголовка SOAPAction:

[no name]

Итак, я обнаружил, что мне пришлось обновить ссылку на веб-сервис в моем приложении winforms, возможно, bcoz веб-сайт теперь содержит SSL-сертификат и изменения. После применения изменений я смог вызвать веб-службу с помощью сертификата клиента, используя приведенный ниже код.

строка certPath = "C:\\MyProjects\\WinApp1\\mydomain.CRT";
X509Certificate cert = X509Certificate.CreateFromCertFile(certPath);

обслуживание.Значении clientcertificates.Добавить (сертификат);
строка resultString = service.ServiceMethod(param1);

Примечание: Я обновляю свои ответы здесь, чтобы они могли быть полезны тем, кто очень новичок в такой реализации.