Вызов веб-службы с использованием сертификата клиента для проверки подлинности в ASP.NET веб-приложении

ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.

Эта статья на английском языке: 901183
Аннотация
В данной статье рассматривается передать сертификат клиента для проверки подлинности веб-службы из ASP.NET веб-приложения.

Примечание Действия, описанные в данной статье применимы и к при прямой HTTP-запрос с помощью HttpWebRequest класс, если не вызвать веб-службу.
ВВЕДЕНИЕ
Как правило веб-службы должен пройти проверку подлинности приложения, вызывающие веб-службы. Веб-службам необходимо выполнить проверку подлинности вызывающих их приложений перед тем, как веб-служба сможет выполнить авторизацию. Одним из способов проверки подлинности является требовать от приложений, вызывающих веб-службу, предъявить сертификат клиента.

Когда ASP.NET веб-приложения пытается вызвать веб-службу, которая использует проверку подлинности сертификата, может появиться сообщение об ошибке «доступ запрещен». Когда консольное приложение или приложение Microsoft Windows Forms вызывает же веб-службы, не появляется сообщение об ошибке.

Это происходит, если компьютер поддерживает два различных хранилищах сертификатов:
  • Локальное хранилище компьютера: В этом хранилище, чтобы найти clientcertificates выглядит ASP.NET веб-приложения.
  • В хранилище локального пользователя: В этом хранилище, чтобы найти clientcertificates выглядит интерактивный пользователь приложения.
Обычно когда приложение интерактивный пользователь устанавливает сертификат клиента, клиентский сертификат установлен в хранилище локального пользователя. Таким образом сертификат клиента работает для интерактивных пользовательских приложений. Однако сертификат клиента не работает для ASP.NET веб-приложений.
Дополнительная информация
Чтобы включить ASP.NET веб-приложения на использование сертификата клиента, необходимо установить клиентский сертификат в хранилище локального компьютера. При установке сертификата клиента в хранилище локального компьютера, сертификат клиента доступен только для учетных записей пользователей в группы «Администраторы» и для пользователя, установившего сертификат клиента. Таким образом необходимо предоставить доступ к клиентский сертификат для учетной записи пользователя, которая используется для запуска ASP.NET веб-приложения.

Примечание Требуется платформа.NET Framework, Майкрософт 1.1 Пакет обновления 1 (SP1) установлен на использование клиентских сертификатов в хранилище локального компьютера.

Кроме того когда приложение ASP.NET вызывает веб-службу, приложение необходимо экспортировать клиентский сертификат из хранилища сертификатов, а затем добавьте сертификат клиента для вызова веб-службы.

Установка сертификата клиента и предоставление доступа учетной записи пользователя

Для установки сертификата клиента и предоставление доступа к клиентский сертификат для учетной записи пользователя, которая используется для запуска ASP.NET веб-приложения, выполните следующие действия.

Шаг 1: Установка сертификата клиента в хранилище локального компьютера

При наличии клиентского сертификата в файле PKCS #12 (.pfx), canuse Microsoft Windows HTTP службы сертификатов конфигурации Tool(WinHttpCertCfg.exe) для установки сертификата клиента и предоставление доступа к сертификат клиента для additionaluser учетные записи, такие как учетная запись сетевой службы. Чтобы сделать это, выполните thesesteps.
  1. Загрузите и установите средство конфигурации сертификатов Microsoft Windows HTTP службы. Чтобы получить это средство, посетите следующий веб-узел корпорации Майкрософт:
  2. В командной строке выполните следующую команду:
    winhttpcertcfg -i PFXFile -c LOCAL_MACHINE\My - IWAM_TESTMACHINE -p PFXPassword
    ПримечаниеPfxFile — Это имя PFX-файла. Пароль — пароль для PFX-файла. Если файл не требуется пароль, опущен параметр -p .

    Как правило файл WinHttpCertCfg.exe находится в следующей папке:
    C:\Program Files\Windows Resource Kits\Tools
Если нет доступа к PFX-файл и вы haveinstalled службы сертификации на компьютере, на котором выполняется Microsoft WindowsServer 2003 или Microsoft Windows 2000 Server, можно запросить и установить certificatedirectly клиента в хранилище локального компьютера. Чтобы сделать это, выполните следующие действия.
  1. Войдите на клиентский компьютер с помощью учетной записи пользователя, имеющей права администратора.
  2. В Microsoft Internet Explorer посетите веб-узел центра сертификации (ЦС) сертификации. Например если сервер ЦС с именем CAServer, посетите следующий веб-узел:
    http://CAServer/certsrv
  3. В группе выберите задачущелкните запросить сертификати щелкните Расширенный запрос сертификата.
  4. Нажмите кнопку Создать и выдать запрос к этому ЦС.
  5. Введите имя и адрес электронной почты в форме Расширенный запрос сертификата .
  6. В разделе Нужный тип сертификата выберите Сертификат проверки подлинности клиента.
  7. В разделе Параметры ключа установите флажок Сохранить сертификат в хранилище сертификатов локального компьютера и нажмите кнопку Отправить.

    Запишите или запомните идентификатор запроса для сертификата клиента.
  8. В диалоговом окне Нарушение потенциальных сценариев нажмите кнопку Да.
  9. После центр сертификации выдал сертификат клиента, щелкните " Домой" и выберите команду Просмотр состояния ожидаемого запроса сертификата.
  10. В группе выберите запрос сертификата, который нужно просмотретьвыберите запрос сертификата, отправленные вами на шаге 7.
  11. Щелкните установить этот сертификати нажмите кнопку Да в диалоговом окне Нарушение возможных сценариев .

Действие 2: Настройте доступ к сертификату клиента

На этом шаге необходимо предоставить разрешение для toaccess учетной записи ASP.NET сертификат клиента, который хранится в хранилище локального компьютера. Учетная запись сетевой службы является defaultaccount для запуска веб-приложений для Windows Server 2003. Таким образом необходимо grantaccess сертификат учетной записи сетевой службы. Если вы haveconfigured пользовательской учетной записи для запуска ASP.NET, необходимо предоставить доступ для customaccount.

Примечание В Microsoft Internet информации сервера (IIS) 5.0, ASP.NET выполняется под ASPNETaccount, а не под учетной записи сетевой службы. Таким образом необходимо grantpermissions для учетной записи ASPNET на компьютере, на котором выполняется IIS 5.0.

Чтобы предоставить доступ для учетной записи определенного пользователя, запустите в командной строке followingcommand:
-C LOCAL_MACHINE\MY WinHttpCertCfg.exe -g -s"IssuedToName" -a "Имя учетной записи"
ПримечаниеИмя учетной записи — Имя учетной записи локального компьютера или учетной записи домена. IssuedToName — Это имя компании или домена, которому выдана certificatewas клиента. Эта команда содержит строку поиска без учета регистра. Строка поиска находит firstenumerated сертификат с именем субъекта, содержащий строку.

Следующая команда является примером как для предоставления доступа к отказа сертификат для учетной записи сетевой службы в Microsoft IIS (IIS) 6.0:
-C LOCAL_MACHINE\MY WinHttpCertCfg.exe -g -s"IssuedToName"-"Сетевая служба"
Следующая команда командной строки приведен пример о том, как предоставить доступ к клиентский сертификат для учетной записи ASPNET в IIS 5.0.
-C LOCAL_MACHINE\MY WinHttpCertCfg.exe -g -s"IssuedToName"-"ASPNET"
Примечание Используя средство настройки служб сертификатов Windows HTTP, можно объединить theprocess импорта сертификата клиента и theprocess настройки доступа к сертификату клиента за один шаг. Forexample, следующая команда выполняет оба процесса:
Winhttpcertcfg.exe -i PFXFile -c LOCAL_MACHINE\My - "Имя учетной записи

Шаг 3: Копирование сертификата клиента в хранилище локального пользователя в хранилище локального компьютера

Если интерактивное приложение как приложение Windows Forms или команды lineapplication можно получить сертификат клиента, clientcertificate уже хранится в хранилище локального пользователя. Однако если приложение-службу как ASP.NET веб-приложения нет доступа одного сертификата клиента, клиентский сертификат может не буфераданных в хранилище локального компьютера.

Это объясняет, как копировать aclient сертификатов в хранилище локального пользователя в хранилище локального компьютера с помощью мастера экспорта сертификатов.

Примечание Если сертификат клиента уже есть в хранилище локального компьютера или сертификат клиента можно установить непосредственно в хранилище локального компьютера как inStep 1, перейдите к шагу 4. Тем не менее при использовании шаг 3, необходимо затем вернуться к шагу 2 togrant доступ к сертификату клиента.

Чтобы скопировать сертификат клиента в хранилище localmachine, выполните следующие действия.
  1. Нажмите кнопку Пуск, выберите пункт выполнить, тип MMC, а затем нажмите кнопку ОК.
  2. В меню файл выберите команду Добавить или удалить оснасткуи нажмите кнопку Добавить.
  3. В диалоговом окне Добавить изолированные оснастки щелкните сертификаты, нажмите кнопку Добавить, выберите учетная запись компьютера, нажмите кнопку Далееи нажмите кнопку Готово.
  4. В диалоговом окне Добавить изолированные оснастки щелкните сертификаты, нажмите кнопку Добавить, выберите моей учетной записи пользователяи нажмите кнопку Готово.
  5. Нажмите кнопку Закрыть, а затем нажмите кнопку ОК.
  6. Чтобы экспортировать клиентский сертификат в хранилище локального пользователя, выполните следующие действия.
    1. Разверните узел Сертификаты - текущий пользователь, разверните узел Личныеи щелкните сертификаты.
    2. Щелкните правой кнопкой мыши сертификат клиента, выберите команду Все задачи, нажмите кнопку Экспорти нажмите кнопку Далее.
    3. Если параметр Да, экспортировать закрытый ключ недоступен, ASP.NET веб-приложение не может использовать сертификат клиента. Необходимо получить другой сертификат клиента. Чтобы сделать это, следуйте инструкциям в шаге 1 и шаг 2. В противном случае щелкните Да, экспортировать закрытый ключ, а затем два раза нажмите кнопку Далее .
    4. В поле пароль и Подтверждение введите пароль и нажмите кнопку Далее.
    5. В поле имя файла введите имя файла. Нажмите кнопку Далее, а затем нажмите кнопку Готово.
    6. В диалоговом окне Мастера экспорта сертификатов нажмите кнопку ОК.
  7. Для импорта сертификата клиента в хранилище локального компьютера, выполните следующие действия.
    1. Разверните узел Сертификаты (локальный компьютер), а затем разверните Личные.
    2. Щелкните правой кнопкой мыши сертификаты, выберите команду Все задачи, нажмите кнопку Импорти нажмите кнопку Далее.
    3. В поле имя файла введите имя файла, указанное в шаге 6e и нажмите кнопку Далее.
    4. В поле пароль введите пароль, который задали на шаге 6 d, а затем два раза нажмите кнопку Далее .
    5. Нажмите кнопку Готово, а затем нажмите кнопку ОК.

Шаг 4: Установите корневой сертификат центра сертификации

Если сертификат клиента уже подписан externalCA, например VeriSign, или если вы уже установили rootcertificate для центра сертификации, можно пропустить шаг 4.

По умолчанию Windows содержит корневые сертификаты многих предварительно установлен в хранилище доверенных RootCertificate externalCAs.
Убедитесь, что установлен корневой сертификат
Чтобы убедиться, что установлена rootcertificate для центра сертификации, выполните thesesteps.
  1. Нажмите кнопку Пуск, выберите пункт выполнить, тип MMC, а затем нажмите кнопку ОК.
  2. В меню файл выберите команду Добавить или удалить оснасткуи нажмите кнопку Добавить.
  3. В диалоговом окне Добавить изолированные оснастки щелкните сертификаты, нажмите кнопку Добавить, выберите учетная запись компьютера, нажмите кнопку Далееи нажмите кнопку Готово.
  4. Нажмите кнопку Закрыть, а затем нажмите кнопку ОК.
  5. Разверните узел Сертификаты (локальный компьютер), разверните узел Доверенные корневые центры сертификациии щелкните сертификаты.
  6. В правой панели убедитесь, что указано корневой сертификат ЦС, который требуется использовать.
Установка корневого сертификата
Если корневой сертификат ЦС, который вы хотите использовать notlisted, необходимо установить корневой сертификат. Если корневой сертификат ЦС, который вы хотите использовать был выпущен, чтобы вы в файле сертификата, например, файл a.cer, файл .der или PFX-файл, выполните следующие действия:
  1. Разверните узел Сертификаты (локальный компьютер), щелкните правой кнопкой мыши Доверенные корневые центры сертификации, выберите пункт Все задачии нажмите кнопку Импорт.
  2. В диалоговом окне Мастер импорта сертификатов нажмите кнопку Далееи затем в поле имя файла введите имя файла сертификата и два раза нажмите кнопку Далее .
  3. Нажмите кнопку Готово, а затем нажмите кнопку ОК.
Запрос корневой сертификат
Если центр сертификации, который вы хотите использовать включается в базу данных установки служб сертификации Microsoft, вы можете запросить корневого сертификата. Чтобы сделать это, выполните следующие действия.
  1. В обозревателе Internet Explorer посетите сайт центра сертификации. Например если сервер ЦС с именем CAServer, посетите следующий веб-узел:
    http://CAServer/certsrv
  2. Щелкните ссылку Загрузка сертификата ЦС, цепочки сертификатов или CRLи затем выберите Загрузка сертификата ЦС.
  3. В диалоговом окне Загрузка файла нажмите кнопку Сохранить.
  4. В диалоговом окне Сохранить как введите расположение, где нужно сохранить файл сертификата и нажмите кнопку Сохранить.
  5. После сохранения файла корневого сертификата, выполните действия в разделе «Установить корневой сертификат» для установки файл сертификата в хранилище доверенных корневых центров сертификации.

Вызов веб-службы

После установки сертификата клиента в хранилище локального компьютера или в хранилище локального пользователя, можно открыть клиентский сертификат из вызова веб-службы ASP.NET веб-приложения. Действия, необходимые для доступа к сертификат клиента одинаковы для приложения Windows Forms или ASP.NET веб-приложения.

Если используется платформа.NET Framework 1.1, необходимо сначала экспортировать ключ DER-шифрованный файл. Необходимо экспортировать ключ, так как класс System.Security.Cryptography.X509Certificates.X509Certificate содержит методы для непосредственного доступа к сертификата из хранилища сертификатов. Таким образом приложение должно прочитать из DER-шифрованный файл сертификата.

Примечание Усовершенствования служб Web 2.0 для Microsoft, .NET (WSE) предоставляет способ для приложения для получения сведений о сертификате, непосредственно из хранилища сертификатов.

В следующем C# примере кода показано, как вызвать веб-службу, передавая сертификат клиента для проверки подлинности.
using System.Security.Cryptography.X509Certificates;...  public void CallWebService()  {    // TODO: Replace <C:\WSClientCert.cer> with the path of your certificate file.    string certPath = @"<C:\WSClientCert.cer>";    // Create an instance of the Web service proxy.    WebSvc.math mathservice = new WebSvc.math();    // TODO: Replace <https://wsserver/securemath/math.asmx> with a valid URL.    mathservice.Url = @"<https://wsserver/securemath/math.asmx>";    // Create an X509Certificate object from the information     // in the certificate export file, and then add the certificate to the     // ClientCertificates collection of the Web service proxy.    mathservice.ClientCertificates.Add(        X509Certificate.CreateFromCertFile(certPath));    long lngResult = 0;    try    {      lngResult = mathservice.Add(Int32.Parse(operand1.Text),           Int32.Parse(operand2.Text));      string result = lngResult.ToString();    }    catch(Exception ex)    {      if(ex is WebException)      {        WebException we = ex as WebException;        WebResponse webResponse = we.Response;        throw new Exception("Exception calling method. " + ex.Message);      }    }  }

Веб-службы WSE 2.0 для .NET, корпорация Майкрософт

Усовершенствования служб Web 2.0 для Microsoft, .NET (WSE) — это библиотека классов .NET, Microsoft для создания веб-службы с помощью последней версии протоколов веб-служб. Эти протоколы включают следующее:
  • WS-Security
  • WS-SecureConversation
  • WS-Trust
  • WS-Policy
  • WS-SecurityPolicy
  • WS-адресации
  • Вложениях WS
Примечание WSE не включены в состав платформа.NET Framework. Чтобы получить WSE, посетите следующий веб-узел корпорации Майкрософт: Необходимо использовать один из этих протоколов для доступа к веб-службе, требуется проверка подлинности сертификата клиента. Тем не менее можно использовать класс Microsoft.Web.Services2.Security.X509 . Класс Microsoft.Web.Services2.Security.X509 содержит методы для непосредственного доступа к клиентский сертификат в хранилище сертификатов. При использовании этих методов нет необходимости экспортировать сертификат в файл.

В следующем C# примере кода показано, как найти первый сертификат с именем SecureMathClient в хранилище локального компьютера. Затем в этом примере кода используется сертификат для вызова метода Add веб-службы math. Math веб-службы запрашивает сертификат клиента.
...  // TODO: Replace <SecureMathClient> with the name of the client certificate.  string certName = "<SecureMathClient>";  // WSE 2.0 method  X509CertificateStore store =    X509CertificateStore.LocalMachineStore(X509CertificateStore.MyStore);  store.OpenRead();  // Look for the first certificate that is named SecureMathClient.  // Look in the local machine store.  X509CertificateCollection col=     (X509CertificateCollection)store.FindCertificateBySubjectString(certName);  X509Certificate cert =null;  try  { // This sample obtains the first matching certificate from the collection.    cert = col[0];  }   catch(Exception ex)  {    throw new Exception("Certificate not Found!");  }  // Create an instance of the Web service proxy.  math mathservice = new math();  // TODO: Replace <https://wsserver/securemath/math.asmx> with a valid URL.  mathservice.Url = @"<https://wsserver/securemath/math.asmx>";  mathservice.ClientCertificates.Add(cert);  long lngResult = 0;  try  {    lngResult = mathservice.Add(Int32.Parse(operand1.Text),         Int32.Parse(operand2.Text));    result.Text = lngResult.ToString();  }  catch(Exception ex)  {    if(ex is WebException)    {      WebException we = ex as WebException;      WebResponse webResponse = we.Response;      throw new Exception("Exception calling method. " + ex.Message);    }  }
Ссылки
Дополнительные сведения о классе System.Security.Cryptography.X509Certificates.X509Certificate посетите следующий веб-узел Microsoft Developer Network (MSDN): Дополнительные сведения о том, как вызывать повышенной безопасности веб-узла с помощью ASP.NET веб-приложение, щелкните следующий номер статьи базы знаний Майкрософт:
817854 ИСПРАВИТЬ: ASP.NET веб-приложения невозможно передать клиентский сертификат на защищенной веб-узел

Внимание! Эта статья переведена автоматически

Vlastnosti

ID článku: 901183 – Posledná kontrola: 01/09/2016 08:19:00 – Revízia: 5.0

Microsoft .NET Framework 1.1

  • kbcode kbwebservices kbcertservices kbhowto kbinfo kbmt KB901183 KbMtru
Pripomienky