static void Main() { // Create all the objects that will be required CX509CertificateRequestPkcs10 p10 = new CX509CertificateRequestPkcs10Class(); CX509PrivateKey pri = new CX509PrivateKeyClass(); CX500DistinguishedName dn = new CX500DistinguishedNameClass(); CObjectId objecc = new CObjectIdClass(); CObjectId objhash = new CObjectId(); string base64p10; // Initialize the object ID class for the ECC algorithm (ECDSA_P256) // objecc.InitializeFromAlgorithmName(ObjectIdGroupId.XCN_CRYPT_PUBKEY_ALG_OID_GROUP_ID, ObjectIdPublicKeyFlags.XCN_CRYPT_OID_INFO_PUBKEY_ANY, "ECDSA_P256"); objecc.InitializeFromAlgorithmName(ObjectIdGroupId.XCN_CRYPT_PUBKEY_ALG_OID_GROUP_ID, ObjectIdPublicKeyFlags.XCN_CRYPT_OID_INFO_PUBKEY_ANY, AlgorithmFlags.AlgorithmFlagsNone, "ECDSA_P256"); // Initialize the object ID class for the hashing algorithm (SHA384) objhash.InitializeFromAlgorithmName(ObjectIdGroupId.XCN_CRYPT_HASH_ALG_OID_GROUP_ID, ObjectIdPublicKeyFlags.XCN_CRYPT_OID_INFO_PUBKEY_ANY, AlgorithmFlags.AlgorithmFlagsNone, "SHA384"); // Provide provider name and the object id to the private key object pri.ProviderName = "Microsoft Software Key Storage Provider"; pri.Algorithm = objecc; // Create the actual key pair pri.Create(); // Encode the name in using the Distinguished Name object dn.Encode("CN=YourName", X500NameFlags.XCN_CERT_NAME_STR_NONE); // Initialize the PKCS#10 certificate request object based on the private key. // Using the context, indicate that this is a user certificate request and don't // provide a template name p10.InitializeFromPrivateKey(X509CertificateEnrollmentContext.ContextUser, pri, ""); // The newly created certificate request object will contain some default extensions. // Suppress these defaults by setting the SuppressDefaults flag p10.SuppressDefaults = true; p10.HashAlgorithm = objhash; // Assing the subject name by using the Distinguished Name object initialized above p10.Subject = dn; // Encode the certificate request p10.Encode(); // Get the certificate request in form of a base 64 encoded string base64p10 = p10.get_RawData(EncodingType.XCN_CRYPT_STRING_BASE64); // print the certificate request on the console Console.Write(base64p10); Console.ReadKey(); return; }