Не удается отправить HttpWebRequest с сертификатом из SharePoint

#sharepoint #ssl #httpwebrequest #x509certificate

#sharepoint #ssl #httpwebrequest #x509certificate

Вопрос:

Я пытаюсь отправить HttpRequest из моей веб-части SharePoint 2007 в другую веб-службу. Служба ожидает сертификат клиента X509 для аутентификации.

Я написал простое консольное приложение, у которого нет проблем с отправкой запроса и аутентификацией с помощью моего сертификата:

 byte[] certBytes = getBytes();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("<server_url>");
X509Certificate2 cert = new X509Certificate2(certBytes, "<password>", X509KeyStorageFlags.MachineKeySet);
request.ClientCertificates.Add(cert);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  

Но как только я запускаю тот же код с моего веб-раздела SharePoint, он завершается с ошибкой, потому что «Не удается создать безопасное соединение SSL / TSL».

Замечание: Если я не использую X509KeyStorageFlags.Флаг MachineKeySet, я получаю «Доступ запрещен» в SharePoint. Согласно http://social.msdn.microsoft.com/Forums/en/windowssecurity/thread/f1981374-5a25-45c7-aea8-aad859800ae7 флаг должен это исправить.

Веб-служба (на базе Apache) регистрирует следующую ошибку:

 [error] Re-negotiation handshake failed: Not accepted by client!?
  

Есть идеи, почему тот же код работает для моего консольного приложения, но не на SharePoint?

Комментарии:

1. Сервер Sharepoint запущен под другой учетной записью или пользовательским контекстом. Вы должны добавить сертификат клиента в контекст этого пользователя, чтобы HttpWebRequest в веб-части мог его получить. Google для winhttpcertcfg и использования вокруг него, и это должно дать указания о том, как заставить это работать.