Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#、WMI和/或System.Management从IIS 6.0获取站点列表和SSL证书?_C#_Iis 6_Wmi_System.management - Fatal编程技术网

如何使用C#、WMI和/或System.Management从IIS 6.0获取站点列表和SSL证书?

如何使用C#、WMI和/或System.Management从IIS 6.0获取站点列表和SSL证书?,c#,iis-6,wmi,system.management,C#,Iis 6,Wmi,System.management,我正在尝试将IIS 6.0站点上的所有SSL证书从指定的远程服务器导出到集中备份服务器,以便我们可以迁移和/或备份SSL证书,但是我不知道如何使用IIS 6.0执行此操作(我们在暂存和生产中的所有服务器仍然运行IIS 6.0)。是否有一种针对IIS6.0网站的C#和System.Management方法。我已经尝试了我能想到的一切 PSEDOO逻辑: 获取服务器X上所有IIS网站的列表 如果站点具有与其关联的SSL证书绑定,请使用IIS网站的名称导出SSL证书 以下代码更接近IIS 7.0所需的

我正在尝试将IIS 6.0站点上的所有SSL证书从指定的远程服务器导出到集中备份服务器,以便我们可以迁移和/或备份SSL证书,但是我不知道如何使用IIS 6.0执行此操作(我们在暂存和生产中的所有服务器仍然运行IIS 6.0)。是否有一种针对IIS6.0网站的C#和System.Management方法。我已经尝试了我能想到的一切

PSEDOO逻辑: 获取服务器X上所有IIS网站的列表 如果站点具有与其关联的SSL证书绑定,请使用IIS网站的名称导出SSL证书

以下代码更接近IIS 7.0所需的代码:

  using (ServerManager serverManager = ServerManager.OpenRemote(this.ServerName))
        {
            string collectionDisplay = null;
            if (serverManager.Sites != null)
                collectionDisplay = "There are " + serverManager.Sites.Count.ToString() + " sites:\n\n";

            string siteDisplay = null;

            foreach (Site site in serverManager.Sites)
            {
                siteDisplay = siteDisplay + site.Name + ": ID = " + site.Id + "\n";

                // Display each property of each bindings.
                string bindingDisplay = null;
                foreach (Binding binding in site.Bindings)
                {
                    if (binding.Protocol == "https")
                    {
                        bindingDisplay = bindingDisplay + "  Binding:\n   BindingInformation: " + binding.BindingInformation;

                        // There is a CertificateHash and CertificateStoreName for the https protocol only.
                        bindingDisplay = bindingDisplay + "\n   CertificateHash: " +
                            binding.CertificateHash + ": ";

                        //Add the certificate hash to the collection
                        if (!IisCertificateHashCollection.ContainsKey(binding.CertificateHash))
                        {
                            IisCertificateHashCollection.Add(binding.CertificateHash, site.Name);
                            //IisCertificateHashCollection.Add(new KeyValuePair<string, byte[]>(site.Name, binding.CertificateHash));
                        }


                        // Display the hash.
                        foreach (System.Byte certhashbyte in binding.CertificateHash)
                        {
                            bindingDisplay = bindingDisplay + certhashbyte.ToString() + " ";
                        }
                        bindingDisplay = bindingDisplay + "\n   CertificateStoreName: " +
                            binding.CertificateStoreName;
                    }
                    bindingDisplay = bindingDisplay + "\n   EndPoint: " + binding.EndPoint;
                    bindingDisplay = bindingDisplay + "\n   Host: " + binding.Host;
                    bindingDisplay = bindingDisplay + "\n   IsIPPortHostBinding: " + binding.IsIPPortHostBinding;
                    bindingDisplay = bindingDisplay + "\n   Protocol: " + binding.Protocol;
                    bindingDisplay = bindingDisplay + "\n   ToString: " + binding.ToString();
                    bindingDisplay = bindingDisplay + "\n   UseDsMapper: " + binding.UseDsMapper + "\n\n";

                }

                siteDisplay = siteDisplay + bindingDisplay;
            }

            collectionDisplay = collectionDisplay + siteDisplay + "\n";

        }

您可以使用
System.DirectoryServices
获取IIS6上的证书哈希:

DirectoryEntry dir = new DirectoryEntry(@"IIS://Localhost/W3SVC/1"); //this is the metabase path
PropertyValueCollection vals = dir.Properties[SSLCertHash]; //this is the propertyName
其余部分与IIS7中的相同

希望这有帮助, 罗特姆瓦隆

DirectoryEntry dir = new DirectoryEntry(@"IIS://Localhost/W3SVC/1"); //this is the metabase path
PropertyValueCollection vals = dir.Properties[SSLCertHash]; //this is the propertyName