因此,Microsoft.Web.Administration API非常易于用于为站点创建HTTP和HTTPS绑定:
using (ServerManager manager = new ServerManager())
{
Site site = manager.Sites[siteName];
site.Bindings.Clear();
site.Bindings.Add("*:80:", "http");
site.Bindings.Add("*:443:", "https");
manager.CommitChanges();
}
Run Code Online (Sandbox Code Playgroud)
但是没有SSL证书,HTTPS绑定就没有意义了.如何使用此API以编程方式选择证书文件并将其与HTTPS绑定一起使用?
有一个方法重载,用于添加将正确添加证书到HTTP.sys的Bindings,请参阅:http://msdn.microsoft.com/en-us/library/bb355650( v = VS.90).aspx
您可以选择实际设置绑定设置:
binding.CertificateHash和binding.CertificateStoreName以及提交时将与HTTP.sys正确注册:http://msdn.microsoft.com/en-us/library/microsoft.web.administration.binding_properties(v = VS.90 ). ASPX
所述Bindings.Add()方法具有用于使SSL证书中的过载.如果您已拥有SSL证书,则可以从SSL证书库中选择它,如下所示:
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly);
var certificate = store.Certificates.Find(X509FindType.FindByThumbprint, the thumbprint for the key", true);
var site = _mgr.Sites[name];
site.Bindings.Add("*:4043:", certificate[0].GetCertHash(), "MY");
Run Code Online (Sandbox Code Playgroud)
运行代码后,可以通过命令行运行代码来检查代码是否有效:
netsh http show sslcert
Run Code Online (Sandbox Code Playgroud)
如果你需要证书哈希值(即在具有各种SSL证书的单台机器上有多个IP),Helephant的答案是最好的,你需要知道如何获得证书/哈希值.下面的几行演示了如何找到信息,因为MSDN文档对于这个主题来说太差了.
您无法使用ServerManager.OpenRemote()远程更新SSL绑定 - 似乎存在此错误.Appcmd对你也无济于事.
如果你想将一个字节串转换回一个字节数组(如果你知道哈希),这里是如何.
static void Main(string[] args)
{
var store2 = new X509Store(StoreName.TrustedPublisher, StoreLocation.LocalMachine);
Console.WriteLine("TrustedPublisher:");
PrintCerts(store2);
Console.WriteLine();
Console.WriteLine("MY:");
store2 = new X509Store(StoreName.My, StoreLocation.LocalMachine);
PrintCerts(store2);
Console.WriteLine();
Console.WriteLine("CertificateAuthority:");
store2 = new X509Store(StoreName.CertificateAuthority, StoreLocation.LocalMachine);
PrintCerts(store2);
Console.WriteLine();
}
static string PrintHash(byte[] cert)
{
StringBuilder builder = new StringBuilder();
foreach (byte b in cert)
{
builder.AppendFormat("{0:x2}", b);
}
return builder.ToString();
}
static void PrintCerts(X509Store store)
{
store.Open(OpenFlags.OpenExistingOnly);
foreach (var cert in store.Certificates)
{
Console.Write("{0} - {1}", cert.FriendlyName, PrintHash(cert.GetCertHash()));
Console.WriteLine();
}
}
Run Code Online (Sandbox Code Playgroud)
示例输出:
MY:
www.awesomesite.com - cc2b5fc8216a949b58aadc21089c12b2c090f6bd
| 归档时间: |
|
| 查看次数: |
9098 次 |
| 最近记录: |