IIS 7.x, добавление сайта с поддержкой HTTPS: перегрузка SiteCollection.Add (строка, строка, строка, байт []) - PullRequest
10 голосов
/ 03 февраля 2012

Мне нужно программно добавить сайт IIS 7.x, и я застрял, когда он должен быть создан с привязкой HTTPS / SSL по умолчанию, usig SiteCollection.Add (string, string, string, byte []) перегрузки .

Предоставление https:*:80:test.localhost https:*:443:test.localhost как bindingInformation создает исключение ArgumentException с этим сообщением: Указанная HTTPS-привязка недействительна.

Что не так в этой обязательной информации?

Спасибо.

РЕДАКТИРОВАТЬ : Я использую сборку Microsoft.Web.Administration.

Ответы [ 2 ]

15 голосов
/ 03 февраля 2012

Вот что я сделал, чтобы создать сайт 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's 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();
1 голос
/ 03 февраля 2012

Насколько я вижу 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.

...