IIS 7.x, добавление сайта с поддержкой HTTPS: SiteCollection.Add(строка, строка, строка, байт []) перегрузка
Мне нужно программно добавить сайт IIS 7.x, и я застрял, когда это должно быть создано с привязкой HTTPS/SSL по умолчанию, usig SiteCollection.Add(строка, строка, string, byte []) перегрузка.
Предоставление https:*:80:test.localhost
https:*:443:test.localhost
как bindingInformation вызывает исключение ArgumentException с этим сообщением: Указанная привязка HTTPS неверна.
Что не так в этой обязательной информации?
Спасибо.
EDIT: я использую сборку Microsoft.Web.Administration.
Ответы
Ответ 1
Вот что я сделал для создания https-сайта, и он сработал. Конечно, я пропущу некоторые части кода.
using Microsoft.Web.Administration
...
using(var manager = new ServerManager())
{
// variables are set in advance...
var site = manager.Sites.Add(siteName, siteFolder, siteConfig.Port);
var store = new X509Store(StoreName.AuthRoot, StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);
// certHash is my certificate hash, byte[]
var binding = site.Bindings.Add("*:443:", certHash, store.Name);
binding.Protocol = "https";
store.Close();
site.ApplicationDefaults.EnabledProtocols = "http,https";
manager.CommitChanges();
}
UPD: сертификат создается из файла pfx следующим образом:
// get certificate from the file
string pfx = Directory.GetFiles(folder, "*.pfx", SearchOption.AllDirectories).FirstOrDefault();
var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);
var certificate = new X509Certificate2(pfx, certPassword, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
store.Add(certificate);
store.Close();
certHash = certificate.GetCertHash();
Ответ 2
Насколько я могу видеть BindingInformation
без протокола:
Значение этого свойства представляет собой строку с разделителями двоеточия, которая включает IP-адрес, порт и имя узла привязки.
Источник: http://msdn.microsoft.com/en-us/library/microsoft.web.administration.binding.bindinginformation%28v=vs.90%29.aspx
Существует также перегрузка, которая принимает параметр BindingProtocol:
public Site Add(
string name,
string bindingProtocol,
string bindingInformation,
string physicalPath
)
Источник: http://msdn.microsoft.com/en-us/library/bb359364%28v=vs.90%29.aspx
Может быть, вы должны использовать объект Binding, предлагаемый экземпляром Site, поскольку он предлагает больше настроек, чем экземпляр SiteCollection.