Подтвердить что ты не робот

Программно импортировать сертификат в IIS?

У меня есть сертификат .pem для SSL, я хочу распространять его с помощью своего веб-приложения в MSI (должен работать на компьютерах клиентов). Затем мне нужно импортировать его (в некоторые хранилища учетных данных?) И сообщить мне привязки на сайте, чтобы использовать его. Но как я могу это сделать в коде? Я обнаружил Microsoft.Web.Administration, но не уверен, куда идти оттуда...

Это в IIS7 btw.

EDIT: Цель здесь - иметь веб-приложение, которое клиенты могут запускать в своих интрасетях. Он в основном выступает в качестве API для iPhone-приложения. (Может быть, это не лучший дизайн, но мы заперты сейчас.) Таким образом, клиент устанавливает MSI и voila, у них есть веб-сервис. Теперь должна быть аутентификация паролей между iPhone и веб-службой; Самый простой способ - сделать это в https. Поэтому я сделал самозаверяющий сертификат.

Я знаю, что перераспределение одного сертификата, как правило, плохая идея, но мы просто пытаемся победить случайных хакеров здесь... это будет только интрасеть и только для бизнеса, маловероятно, что кто-то собирается делать что-то слишком сумасшедшее, и API строго ограничивает количество Bad Things, которое вы можете сделать в базе данных в любом случае.

Итак, мы идем, цель состоит в том, чтобы иметь аутентификацию паролем в веб-приложении интрасети с установкой одним щелчком мыши (ish).:-D

4b9b3361

Ответ 1

Ответ, дорогие читатели, таков:

// Assume 'site' is already set to your site via something like 
// Site site = mgr.Sites.Add(siteName, directory, 443);

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);

// Here, directory is my install dir, and (directory)\bin\certificate.pfx is where the cert file is.
// 1234 is the password to the certfile (exported from IIS)
X509Certificate2 certificate = new X509Certificate2(directory + @"\bin\certificate.pfx", "1234");

store.Add(certificate);

var binding = site.Bindings.Add("*:443:", certificate.GetCertHash(), store.Name);
binding.Protocol = "https";
store.Close();

Благодаря этой случайной цепочке: http://forums.iis.net/t/1163325.aspx

Ответ 2

Вам нужно сузить свой вопрос. Каков сертификат, используемый для (точно)?

Если ваш сертификат используется для проверки подлинности на стороне клиента (для проверки подлинности клиента на сервере), то распространение его с вашим приложением делает такую ​​проверку подлинности бесполезной, так как вы будете раскрывать секретный ключ.

Если вам нужно проверить сертификат сервера (и вы получили сертификат сервера или цепочку сертификатов в вашем файле PEM), тогда это может сработать, но зачем вам нужно устанавливать сертификат в хранилище сертификатов?

Следует отметить, что формат PEM не поддерживается на основе библиотек Windows или .NET, поэтому вам необходимо преобразовать его в PFX перед развертыванием, а затем импортировать PFX или просто создать хранилище в памяти на основе PFX (вы найдете много информации, глядя на PFX или PKCS # 12 на StackOVerflow).

Обновление: лучше было бы создавать сертификат каждый раз, когда вы устанавливаете приложение, и позволяете пользователю иметь собственный сертификат (например, возможно, что у них уже есть действующий сертификат для их веб-сайта).