由于Helephant的答案是最好的,如果您需要证书散列(即在具有各种SSL证书的单台机器上的多个IP),您需要知道如何获得证书/散列。下面的几行代码演示了如何查找信息,,因为MSDN文档对于此主题非常糟糕。
您无法使用ServerManager.OpenRemote()远程更新SSL绑定 - 看起来这是一个错误。 Appcmd也不会帮助你。
如果你想一个字节的字符串转换回一个字节数组(如果你知道的哈希),here's how.
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();
}
}
输出示例:
MY:
www.awesomesite .com - cc2b5fc8216a949b58aadc21089c12b2c090f6bd
我知道这是一个老问题,但我已经注意到,如果我为绑定设置'CertificateHash'和'CertificateStoreName'值并调用'CommitChanges',一切都会成功,但绑定未设置。不知道为什么似乎发生。 – Fizz 2016-12-06 14:15:56