使用Microsoft.Web.Administration以编程方式安装SSL证书因此,Microsoft.Web.AdministrationAPI非常易于使用来创建HTTP和HTTPS站点绑定:使用(ServerManagermanager=newServerManager()){Sitesite=manager.Sites[siteName];站点.Bindings.Clear();site.Bindings.Add("*:80:","http");site.Bindings.Add("*:443:","https");经理.CommitChanges();但是,如果没有SSL证书,HTTPS绑定就毫无意义。如何使用此API以编程方式选择证书文件并将其与HTTPS绑定一起使用?有一个添加绑定的方法重载,可以将证书正确添加到HTTP.sys,请参阅: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。绑定属性(v=VS.90)。ASPXBindings.Add()方法具有传递SSL证书的重载。如果您已经有SSL证书,您可以从SSL证书存储中选择它,如下所示:varstore=newX509Store(StoreName.My,StoreLocation.LocalMachine);store.Open(OpenFlags.OpenExistingOnly);var证书=商店。Certificates.Find(X509FindType.FindByThumbprint,密钥的指纹",true);varsite=_mgr.Sites[name];site.Bindings.Add("*:4043:",certificate[0].GetCertHash(),"MY");运行代码后,您可以通过从命令行运行它来检查代码是否正常工作:netshhttpshowsslcert如果您需要证书散列(即具有各种SSL证书的一台机器上的多个IP),Helephant's答案是最好的,你需要知道如何获得证书/哈希。以下几行演示了如何找到信息,因为MSDN文档对于这个主题来说很差。你不能使用ServerManager.OpenRemote()远程更新SSL绑定-这似乎有一个错误。Appcmd也不会帮助你。如果你想将字节串转换回字节数组(如果你知道哈希),这就是方法。staticvoidMain(string[]args){varstore2=newX509Store(StoreName.TrustedPublisher,StoreLocation.LocalMachine);Console.WriteLine("TrustedPublisher:");打印证书(商店2);控制台.WriteLine();Console.WriteLine("我的:");store2=newX509Store(StoreName.My,StoreLocation.LocalMachine);打印证书(商店2);控制台.WriteLine();Console.WriteLine("CertificateAuthority:");store2=newX509Store(StoreName.CertificateAuthority,StoreLocation.LocalMachine);打印证书(商店2);控制台.WriteLine();}staticstringPrintHash(byte[]cert){StringBuilderbuilder=newStringBuilder();foreach(证书中的字节b){builder.AppendFormat("{0:x2}",b);}返回生成器.ToString();}staticvoidPrintCerts(X509Storestore){store.Open(OpenFlags.OpenExistingOnly);foreach(varcertinstore.Certificates){Console.Write("{0}-{1}",cert.FriendlyName,PrintHash(cert.GetCertHash()));控制台.WriteLine();}}显示示例:MY:http://www.awesomesite.com–cc2b5fc8216a949b58aadc21089c12b2c090f6bd命名空间不包含此API,因此您必须使用其ConfigurationMethod调用执行此操作的WinAPI的扩展就像是:stringcertificateHash=stringcertificateStore=#my,localmachine,etcConfigurationMethodmethod=binding.Methods["AddSslCertificate"];ConfigurationMethodInstancemi=method.CreateInstance();mi.Input.SetAttributeValue("certificateHash",certificateHash);mi.Input.SetAttributeValue("certificateStoreName",certificateStore);mi.Execute();添加到TaylorBird的评论但使用PowerShell:...Write-Verbose("Removeoldcertificate[{0}]..."-f$SiteHttpsBinding.GetAttributeValue("certificateHash"))$BindingMethod=$SiteHttpsBindings.Methods["RemoveSslCertificate"]$BindingMethodInstance=$BindingMethod.CreateInstance()$BindingMethodInstance.Execute()Write-Verbose("Addnewcertificate[{0}]..."-f$AfterThumbprint)$BindingMethod=$SiteHttpsBindings.Methods["AddSslCertificate"]$BindingMethodInstance=$BindingMethod.CreateInstance()$BindingMethodInstance.Input.SetAttributeValue("certificateHash",$AfterThumbprint)$BindingMethodInstance.Input。SetAttributeValue("certificateStoreName","My")$BindingMethodInstance.Execute()...上面的代码片段非常适合在不删除整个绑定的情况下更新证书我用它来添加和更新本地和远程机器上的ssl绑定。感谢鸟先生提供WinAPI参考。如果您来到这里并想使用PowerShell来执行此操作,我已经在此处提供了一个相当完整的答案。最简单的答案是,如果您知道要使用的证书的哈希值,那么它就是这样做的:以上是C#学习教程:使用Microsoft以编程方式安装SSL证书。需要了解更多C#学习教程,希望大家多多关注—cdIIS:SslBindingsget-itemCert:LocalMachineMyXFX2DX02779XFD1F6F4X8435A5X26ED2X8DEFX95|New-Item0.0.0.0!443本文收集自网络,不代表立场。会员删除。如需转载请注明出处:
