C# IIS 7.x,添加启用HTTPS的站点:SiteCollection.Add(字符串,字符串,字符串,字节[])重载
我需要以编程方式添加一个IIS7.x站点,当默认情况下应该使用HTTPS/SSL绑定(usig)创建该站点时,我遇到了麻烦 将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程序集。据我所知,没有协议: 此属性的值是以冒号分隔的字符串,其中包括 绑定
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。您不必从文件加载证书。