C#使用certenroll.dll生成没有CA的非自签名客户端CX509证书请求

本文关键字:客户端 请求 证书 CX509 CA dll certenroll 使用 | 更新日期: 2023-09-27 18:24:04

我有一个自签名的根证书,它是我使用CERTENROLL.dll的CX509CertificateRequest certificate功能在C#中生成的。

我想编写一个函数,使用相同的API生成由我的根签名的客户端证书。然而,我能找到的唯一一个不生成自签名证书的CertEnroll选项需要经过身份验证的CA。

似乎有一个用于设置签名证书的标志,但它总是无法初始化。

        //Initialize cert
        var cert = new CX509CertificateRequestCertificate();
        //take care of signer
        cert.Issuer = issuen;
        CSignerCertificate sc = new CSignerCertificate();
        var raw = SEScert.GetRawCertData();
        var rawStr=Convert.ToBase64String(raw);
        sc.Initialize(false, X509PrivateKeyVerify.VerifyNone,    
                      EncodingType.XCN_CRYPT_STRING_BASE64, rawStr); //fails here
        cert.SignerCertificate = sc;

有人知道我如何生成由我的root签名的客户端CX509CertificateRequest吗?

如有任何帮助或建议,我们将不胜感激。

C#使用certenroll.dll生成没有CA的非自签名客户端CX509证书请求

我能够解决这个问题。

SEScert的编码是一个十六进制字符串,而不是base64。机器上下文应该设置为true而不是false。正确的代码如下所示:

ISignerCertificate signerCertificate = new CSignerCertificate();
signerCertificate.Initialize(true, X509PrivateKeyVerify.VerifyNone,EncodingType.XCN_CRYPT_STRING_HEX, SEScert.GetRawCertDataString());
cert.SignerCertificate = (CSignerCertificate)signerCertificate; 

希望这对将来的其他人有所帮助。