RemX
RemX

Reputation: 1

ICertRequest2.Submit() return error (0x8007000D): The data is invalid

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

Answers (0)

Related Questions