ОК, на этот вопрос уже дан ответ, но присужденный ответ не для IIS6, а скорее для IIS7 и выше. Пространство имен Microsoft.Web.Administration недоступно для IIS6. Мы объединили ряд технологий, все в .NET 4.0, чтобы заставить это работать.
шаги ...
- Добавить ссылку на COM-компонент IIS CertObj 1.0 Библиотека типов
- На добавленной ссылке CERTOBJLib в окне свойств установите
'Внедрить типы взаимодействия' в false
- Создать класс с помощью следующего метода ...
using System.Linq;
using System.Management;
namespace CertStuff
{
public class CertificateInstaller
{
public void RegisterCertificateWithIIS6(string webSiteName, string certificateFilePath, string certificatePassword)
{
// USE WMI TO DERIVE THE INSTANCE NAME
ManagementScope managementScope = new ManagementScope(@"\\.\root\MicrosoftIISv2");
managementScope.Connect();
ObjectQuery queryObject = new ObjectQuery("SELECT Name FROM IISWebServerSetting WHERE ServerComment = '" + webSiteName + "'");
ManagementObjectSearcher searchObject = new ManagementObjectSearcher(managementScope, queryObject);
var instanceNameCollection = searchObject.Get();
var instanceName = (from i in instanceNameCollection.Cast<ManagementObject>() select i).FirstOrDefault();
// USE IIS CERT OBJ TO IMPORT CERT - THIS IS A COM OBJECT
var IISCertObj = new CERTOBJLib.IISCertObjClass();
IISCertObj.InstanceName = instanceName["Name"].ToString();
IISCertObj.Import(certificateFilePath, certificatePassword, false, true); // OVERWRITE EXISTING
}
}
}
чтобы удалить ссылку на сертификат, используйте следующий метод ...
public void UnRegisterCertificateWithIIS6(string webSiteName)
{
// USE WMI TO DERIVE THE INSTANCE NAME
ManagementScope managementScope = new ManagementScope(@"\\.\root\MicrosoftIISv2");
managementScope.Connect();
ObjectQuery queryObject = new ObjectQuery("SELECT Name FROM IISWebServerSetting WHERE ServerComment = '" + webSiteName + "'");
ManagementObjectSearcher searchObject = new ManagementObjectSearcher(managementScope, queryObject);
foreach (var instanceName in searchObject.Get())
{
var IISCertObj = new CERTOBJLib.IISCertObjClass();
IISCertObj.InstanceName = instanceName["Name"].ToString();
// THE REMOVE CERT CALL COMPLETES SUCCESSFULLY, BUT FOR WHATEVER REASON, IT ERRORS OUT.
// SWALLOW THE ERROR.
try
{
IISCertObj.RemoveCert(false, true);
}
catch (Exception ex)
{
}
}
}
ПРИМЕЧАНИЕ: , если вы получаете сообщение об ошибке «Невозможно внедрить тип взаимодействия« CERTOBJLib.IISCertObjClass ». Вместо этого используйте соответствующий интерфейс.», Это означает, что шаг 2 был пропущен. Убедитесь, что эталонный объект НЕ внедрен.