2016-12-02 3 views
1

Мне нужно использовать взаимную аутентификацию Https в клиенте API отдыха, так как мы получаем только URI, мы не можем добавить сертификат клиента, как и для WCF. Так что я добавил ключи в моем веб .config, как показано ниже:Конфигурация клиента клиента клиента в web.config C#

<appSettings> 
    <add key="URI" value="https://localhost:8080/RestfulAPI/RestfulService.svc/restfulData" /> 
    <add key="CertificateValue" value="certficatename"/> 
    <add key="CertificateLocation" value="LocalMachine"/> 
    <add key="CertificateStoreName" value="My"/> 
    <add key="CertificateFindType" value="FindBySubjectName"/> 
</appSettings> 

и я использую его в мой код клиента, как показано ниже:

X509Store store = new X509Store(ConfigurationManager.AppSettings["CertificateStoreName"], ConfigurationManager.AppSettings["CertificateLocation"]); 
      store.Open(OpenFlags.ReadOnly); 
      X509CertificateCollection certificates = store.Certificates.Find(ConfigurationManager.AppSettings["CertificateFindType"], ConfigurationManager.AppSettings["CertificateValue"], true); 
      X509Certificate certificate = certificates[0]; 
      HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest; 
      request.ClientCertificates.Add(certificate); 

HttpWebResponse response = request.GetResponse() as HttpWebResponse 

Это правильный способ осуществить взаимную аутентификацию Клиент REST API?

Или если кто-то может помочь мне с правильным подходом?

ответ

0

Взаимная аутентификация является функцией безопасности, в которой клиентский процесс должен доказать свою идентичность на сервер, а сервер должен доказать свою личности клиента, прежде чем любой трафик приложений направляется через клиент к -сервер.

(source)

Это также называют иногда аутентификации SSL-2-путь.

Что вы делаете показывает правильное намерение для достижения этой цели, потому что:

  1. Добавление сертификата клиента при создании запроса
  2. Вы использовать HTTPS для обмена данными с сервером

Мое единственное предложение (если это строгое требование) для обеспечения соблюдения этого процесса:

  1. Убедитесь, что запрос не выполняется, если клиент ceritificate не найден
  2. Обеспечить метод ServerCertificateValidationCallback, где вы можете добавить пользовательские validaton (или enforcment политики) при проверке сертификата сервера
  3. Используйте X509Certificate2 и X509Certificate2Collection классов вместо (see here why)
+0

Привет, @AlinG. Мне также нужно настроить параметры сертификата, есть ли другой способ сделать это, кроме тех, которые я упомянул в вышеупомянутом сообщении? – Techie

+0

app.config и запрос к хранилищу сертификатов - это один из способов, поскольку это клиентское приложение, которое также может добавить поддержку для загрузки сертификата из файла; для этого вы можете использовать [X509Certificate2 Ctor] (https://msdn.microsoft.com/en-us/library/ms148420 (v = vs.110) .aspx) и дополнительно разрешить им предоставлять пароль для доступа к сертификату (таким образом, пользователю не нужно устанавливать сертификат). – AlinG