正确地自动创建用于开发的自签名证书

Correctly automating the creation of self-signed certificates for development

我正在尝试自动创建测试环境,其中一个步骤是创建自签名证书以用于 IIS 上的 SSL 绑定。这是一个 WPF 应用程序,旨在根据指定的配置设置 运行 一次创建所有网站、应用程序、windows 服务等。

我试过使用 CertEnrollLib (certenroll.dll),但由于某些未知原因,当我 运行 服务器上的代码时出现以下错误:

当我 运行 在我的机器上时一切正常。 我的第一个问题是,有人知道为什么会这样吗?我偶然发现了这个 link:

Problems when compiling and running code that uses CertEnroll with .NET 4.0 and x64

我已经尝试过上述解决方案:

To get rid of these compilation errors we changed "Embed Interop Types" to "False" in the Properties of the CERTCLIENTLib and CERTENROLLLib references.

无济于事。还尝试按照 link:

中所述更改平台

I still didn't have time to figure out why this happens, but if you compile against x86 platform instead of Any CPU platform (which makes the code to run against x64 platform on x64 systems by default), it will work fine.

但这也不起作用,我得到了同样的错误。我之前也尝试过使用 BouncyCastle,但是又出现了一个 COM 错误。


编辑:感谢@CryptoGuy,我把它修好了。而不是使用引用库的 class 构造函数:

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

感谢您确认您的服务器 OS。问题是 IX509CertificateRequestCertificate2 接口在 Windows Server 2008 中不可用,它是在 Windows 6.1 (Windows 7/Windows Server 2008 R2) 中添加的。 您需要使用标准 IX509CertificateRequestCertificate。从技术上讲,它们是平等的,新界面只是增加了注册网络服务支持(以前的系统不提供)。