Как автоматизировать доступ к веб-сайту IIS, на котором "требуются сертификаты клиента"?
Я работаю на веб-сайте IIS6/ASP.NET, который должен "требовать сертификаты клиента" в виде смарт-карты (в частности, карты общего доступа). Мне нужно создать несколько служб для доступа к различным URL-адресам по таймеру, чтобы выполнять такие вещи, как обновление поисковых индексов, прогрев страниц Sharepoint и другие задачи.
Как это можно сделать, учитывая, что сайт не разрешает доступ, если у вас нет сертификата, который находится на смарт-карте? Я попытался загрузить сертификат (.cer) и загрузить его следующим образом:
HttpWebRequest request = (HttpWebRequest)
WebRequest.Create("https://.../someURL.html");
const string certFilename = @"my.cer";
var cert = X509Certificate2.CreateFromCertFile(certFilename);
cert.Import(certFilename, "my pin", X509KeyStorageFlags.Exportable);
request.ClientCertificates.Add(cert);
HttpWebResponse response = (HttpWebResponse)
request.GetResponse();
Но я получаю 403 Запрещено.
4 ответа
Это не ответ, но у меня недостаточно представителей, чтобы комментировать..Cer не имеет закрытого ключа, это просто открытый сертификат, поэтому вы не можете его использовать. Вам необходимо загрузить закрытый ключ прямо со смарт-карты. Я полагаю, что это может включать создание параметров CSP с именем CSP устройства чтения смарт-карт, а затем загрузить сертификат x509 с закрытым ключом непосредственно с карты. Насколько я знаю, закрытый ключ не будет автоматически установлен для текущего пользователя или текущего хранилища моего компьютера, поэтому вы не сможете загрузить его оттуда. Нет кода извините.
Вы можете загрузить свой сертификат из личного магазина следующим образом:
System.Security.Cryptography.X509Certificates.X509Certificate cert = FindCertByName(PART_AFTER_CN_IN_CERT_SUBJECT);
request.ClientCertificates.Add(cert);
..
private System.Security.Cryptography.X509Certificates.X509Certificate FindCertByName(string simpleName)
{
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
foreach (X509Certificate cert in store.Certificates)
{
if( cert.Subject.Contains("CN="+simpleName))
{
return cert;
}
}
string msg = "The '" + simpleName + "' security certificate is not installed on this system!";
throw new ApplicationException(msg);
}
Вы пытались добавить X509 в кеш учетных данных? Пример:
X509Certificate cert = new X509Certificate("sslCert.txt");
X509CertificateCollection certColl = new X509CertificateCollection();
certColl.Add(cert);
CredentialCache credCache = new CredentialCache();
credCache.Add(new Uri(string.Concat(outputReport.reportURI)), "Basic", new NetworkCredential(NexConfig.User, NexConfig.Pass));
wr.AllowAutoRedirect = false;
wr.ClientCertificates = certColl;
wr.Credentials = credCache;
HttpWebResponse resp = (HttpWebResponse)wr.GetResponse();
Если вы используете SharePoint 2010:
- Перейти в центр администрирования SharePoint
- Перейдите в Управление приложениями> Управление веб-приложениями
- Выделите свой фронтальный сайт SharePoint.
- Выберите "Расширить" в верхнем меню.
Это создает отдельный сайт SharePoint, который использует точно такие же базы данных конфигурации и контента, но вы можете разместить его в другом месте и защитить его отдельно. Это позволяет вам иметь свой обычный защищенный экземпляр SharePoint, который полностью заблокирован, но одновременно размещать другую его версию в другом месте с другой безопасностью, к которой вы можете предоставить другой доступ, а именно к вашей службе, которая должна запускать индексы или другие задания.,