我正在尝试通过C#代码在IIS6中自动生成站点的过程。我正在使用DirectoryServices,马上就到了..我有它创建的网站,设置所有的绑定等只是很好。我还没有想出如何安装我们的通配符ssl证书。以下是详细信息:
我们有一个与'*.example.com‘匹配的SSL证书。我们托管的每个站点都有一个匹配的服务器绑定。例如'test.example.com‘。我想我知道如何添加SecureBinding属性:
DirectoryEntrySite.Properties["SecureBindings"][0] = "xx.xx.xx.xx:443:test.example.com";但是我没有成功地找到关于如何自动将证书安装到该站点的信息。在IIS6管理器中,您可以通过右键单击站点->属性->目录安全->服务器证书-> Next -> Assign an existing Certificate -> (选择证书) -> Next...来完成此操作。
有人能帮上忙吗?
发布于 2012-02-22 03:50:07
看看这个:http://forums.iis.net/t/1163325.aspx
using Microsoft.Web.Administration;
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);
X509Certificate2 certificate = new X509Certificate2(pfxFilePath);
store.Add(certificate);
using (ServerManager serverManager = new ServerManager())
{
Site site = serverManager.Sites["Default Web Site"];
if (site != null)
{
site.Bindings.Add("*:443:", certificate.GetCertHash(), store.Name);
}
store.Close();
}发布于 2013-07-18 05:42:36
好了,这个问题已经回答了,但获奖的答案不是针对IIS6的,而是针对IIS7和更大的。命名空间Microsoft.Web.Administration不可用于IIS6。我们步履蹒跚地结合了一系列技术,都是在.NET 4.0中实现的。
步骤..。
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。确保引用对象未嵌入。
发布于 2019-08-06 00:17:27
要在IIS4.7和.Net 10中执行此操作,可以传递以下标志:
X509Certificate2 certificate = new X509Certificate2(path, "password", X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable| X509KeyStorageFlags.MachineKeySet);如果将证书存储在CurrentUser存储中,而不是存储在LocalMachine存储中,请执行以下操作:
X509Certificate2 certificate = new X509Certificate2(path, "password", X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable| X509KeyStorageFlags.UserKeySet);键集标志表示以下内容:
//
// Summary:
// Private keys are stored in the current user store rather than the local computer
// store. This occurs even if the certificate specifies that the keys should go
// in the local computer store.
UserKeySet = 1,
//
// Summary:
// Private keys are stored in the local computer store rather than the current user
// store.
MachineKeySet = 2,私钥需要与证书的其余部分位于同一位置,才能与IIS一起使用。
https://stackoverflow.com/questions/7759017
复制相似问题