我有一个使用CERTENROLL.dll的CX509CertificateRequest证书功能在C#中生成的自签名根证书。
我想编写一个函数,使用相同的API生成由我的root签名的客户端证书。但是,我能找到的唯一不生成自签名证书的CertEnroll选项需要经过身份验证的CA。
似乎有一个用于设置SignerCertificate的标志,但它总是无法初始化。
//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;有人知道如何生成由根用户签名的客户端CX509CertificateRequest吗?
任何帮助或建议都将不胜感激。
发布于 2013-07-22 23:42:20
我能够解决这个问题。
SEScert的编码是十六进制字符串,而不是base64,而且机器上下文应该设置为true而不是false,正确的代码如下所示:
ISignerCertificate signerCertificate = new CSignerCertificate();
signerCertificate.Initialize(true, X509PrivateKeyVerify.VerifyNone,EncodingType.XCN_CRYPT_STRING_HEX, SEScert.GetRawCertDataString());
cert.SignerCertificate = (CSignerCertificate)signerCertificate; 希望这对将来的其他人有所帮助。
https://stackoverflow.com/questions/17756940
复制相似问题