【发布时间】:2015-02-25 14:38:03
【问题描述】:
我正在尝试自动创建测试环境,其中一个步骤是创建自签名证书以用于 IIS 上的 SSL 绑定。它是一个 WPF 应用程序,旨在根据指定的配置设置运行一次以创建所有网站、应用程序、Windows 服务等。
我尝试使用 CertEnrollLib (certenroll.dll),但由于某些未知原因,我在服务器上运行代码时收到以下错误:
当我在我的机器上运行时,一切正常。 我的第一个问题是,有人知道为什么会这样吗?我偶然发现了这个链接:
Problems when compiling and running code that uses CertEnroll with .NET 4.0 and x64
我已经尝试过上述解决方案:
为了摆脱这些编译错误,我们更改了“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
【问题讨论】:
-
什么操作系统运行你的服务器?
-
@CryptoGuy 服务器:
Windows Server 2008® Service Pack 2, namely Windows Server Web® on control panel->system。我的机器:Windows 7® Service Pack 1.
标签: c# .net ssl ssl-certificate