#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 и использования вокруг него, и это должно дать указания о том, как заставить это работать.