我尝试自动创建测试环境,其中一个步骤是创建自签名证书,用于IIS上的SSL绑定。它是一个WPF应用程序,旨在根据指定的配置设置运行一次以创建所有网站,应用程序,Windows服务和etcera。
我尝试过使用CertEnrollLib(certenroll.dll),但由于某些未知原因,我在服务器上运行代码时出现以下错误:
当我在我的机器上运行时一切正常。 我的第一个问题是,有谁知道为什么会这样?我偶然发现了这个链接:
Problems when compiling and running code that uses CertEnroll with .NET 4.0 and x64
我已尝试过上述解决方案:
为了摆脱这些编译错误,我们改变了#34; Embed Interop 类型"到"错误"在 CERTCLIENTLib和CERTENROLLLib引用的属性。
无济于事。还尝试更改平台,如链接中所述:
我还没有 时间弄清楚为什么会发生这种情况,但是如果你针对x86编译的话 平台而不是任何CPU平台(使代码运行 对于x64系统上的x64平台,默认情况下,它可以正常工作。
但这也不起作用,我得到同样的错误。我之前也尝试过使用BouncyCastle,但又出现了另一个COM错误。
编辑:由于@CryptoGuy,我得到了修复。而不是使用引用库的类构造函数:
var cert = new CX509CertificateRequestCertificate(); // old, not working
// gets the right class to use with my machine, but not with the server
我将其替换为:
IX509CertificateRequestCertificate cert = (IX509CertificateRequestCertificate) Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CX509CertificateRequestCertificate"));
// gets whatever is the CX509CertificateRequestCertificate implementation is
答案 0 :(得分:1)
感谢您确认您的服务器操作系统。问题是IX509CertificateRequestCertificate2接口在Windows Server 2008中不可用,它是在Windows 6.1(Windows 7 / Windows Server 2008 R2)中添加的。 您需要使用标准IX509CertificateRequestCertificate。从技术上讲,它们是平等的,新界面只增加了注册Web服务支持(在以前的系统中不可用)。