C# IIS 7.x,添加启用HTTPS的站点:SiteCollection.Add(字符串,字符串,字符串,字节[])重载

C# IIS 7.x,添加启用HTTPS的站点:SiteCollection.Add(字符串,字符串,字符串,字节[])重载,c#,iis,c#-4.0,iis-7,.net-4.0,C#,Iis,C# 4.0,Iis 7,.net 4.0,我需要以编程方式添加一个IIS7.x站点,当默认情况下应该使用HTTPS/SSL绑定(usig)创建该站点时,我遇到了麻烦 将https::80:test.localhosthttps::443:test.localhost作为绑定信息引发ArgumentException,并显示以下消息:指定的https绑定无效 这个绑定信息有什么问题 多谢各位 编辑:我正在使用Microsoft.Web.Administration程序集。据我所知,没有协议: 此属性的值是以冒号分隔的字符串,其中包括 绑定

我需要以编程方式添加一个IIS7.x站点,当默认情况下应该使用HTTPS/SSL绑定(usig)创建该站点时,我遇到了麻烦

https::80:test.localhost
https::443:test.localhost
作为绑定信息引发ArgumentException,并显示以下消息:指定的https绑定无效

这个绑定信息有什么问题

多谢各位

编辑:我正在使用Microsoft.Web.Administration程序集。

据我所知,没有协议:

此属性的值是以冒号分隔的字符串,其中包括 绑定的IP地址、端口和主机名

资料来源:

还有一个采用参数BindingProtocol的重载:

public Site Add(
    string name,
    string bindingProtocol,
    string bindingInformation,
    string physicalPath
)
资料来源:


也许您应该使用Site实例提供的绑定对象,因为它提供了比SiteCollection实例更多的设置。

以下是我创建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();

错误的端口(443)?缺少证书?@ZombieHunter没有缺少证书,我正在正确加载它,我有字节数组。港口。。。嗯,说得好hahaha@ZombieHunter运气不好,不是端口。只是猜测一下:您的证书是为“test.localhost”?@ZombieHunter颁发的,它是为localhost“原样”颁发的,谢谢您的努力。顺便说一句,我在MSDN中提供了一个到重载文档的链接,如果您查看备注,您会发现这个重载在绑定信息中支持协议。第二,我试着用你的建议的另一种方法做同样的效果。这似乎是一种方法,但当我提交更改时,它抛出一个UnauthorizedAccessException,并且没有描述。你也遇到过这个问题吗?你需要有管理权限才能管理iis和使用auth root证书存储。这不是一个很好的解决方案,但你给了我一个很好的提示,现在它可以正常工作了。非常感谢你!如何获取certHash的值?如果同一站点中的另一子域已在使用同一(*.yourdomain.com)证书,则可以从该子域借用certHash和storeName。您不必从文件加载证书。