Reputation: 1
I'm trying to obtain an digital signature certificate on the local AD CA, but when executing the ICertRequest2 method, I getting an error:
Unhandled exception. System.Runtime.InteropServices.COMException (0x8007000D): The data is invalid. (0x8007000D) at CERTCLILib.ICertRequest2.Submit(Int32 Flags, String strRequest, String strAttributes, String strConfig) at GetCertIX509_1.Program.Main(String[] args).
My code looks like this:
string requesterName = @"DOMAIN\UserName";
string caName = @"CASRV.DOMAIN.LOCAL\DOMAIN-CASRV-CA";
string template = "TempDS";
// create a new private key for the certificate
CX509PrivateKey privateKey = new CX509PrivateKey();
privateKey.ProviderName = "Microsoft RSA SChannel Cryptographic Provider"; //"Microsoft Enhanced Cryptographic Provider v1.0";
privateKey.MachineContext = false;
privateKey.KeyUsage = X509PrivateKeyUsageFlags.XCN_NCRYPT_ALLOW_SIGNING_FLAG;
privateKey.Length = 2048;
privateKey.KeySpec = X509KeySpec.XCN_AT_KEYEXCHANGE;
privateKey.ExportPolicy = X509PrivateKeyExportFlags.XCN_NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG; //XCN_NCRYPT_ALLOW_EXPORT_NONE
privateKey.Create();
// PKCS 10 Request
// we use v1 to avoid compat issues on w2k8
IX509CertificateRequestPkcs10 req = (IX509CertificateRequestPkcs10)new CX509CertificateRequestPkcs10();
req.InitializeFromPrivateKey(X509CertificateEnrollmentContext.ContextUser, privateKey, template);
// get CSR
var enroll = new CX509Enrollment();
enroll.InitializeFromRequest(req);
var csr = enroll.CreateRequest();
Console.WriteLine(csr);
Console.ReadLine();
// submit
const int CR_IN_BASE64 = 1, CR_OUT_BASE64 = 1;
const int CR_IN_PKCS7 = 0x300;
const int CR_IN_PKCS10 = 0x100;
ICertRequest2 liveCsr = new CCertRequest();
var disposition = (RequestDisposition)liveCsr.Submit(0, csr, null, caName);// | CR_IN_PKCS7 CR_IN_BASE64 CR_IN_BASE64 | CR_IN_PKCS10
I tried changing the flags to CR_IN_BASE64 | CR_IN_PKCS10
.
I hope any ideas on how to fix this, thx.
Upvotes: 0
Views: 93