static void Main() { // Create all the objects that will be required CX509CertificateRequestPkcs10 p10 = new CX509CertificateRequestPkcs10Class(); CX509PrivateKey pri = new CX509PrivateKeyClass(); CCspInformation csp = new CCspInformationClass(); CCspInformations csps = new CCspInformationsClass(); CX500DistinguishedName dn = new CX500DistinguishedNameClass(); string base64p10; // Initialize the csp object using the desired Cryptograhic Service Provider (CSP) csp.InitializeFromName("Microsoft Enhanced Cryptographic Provider v1.0"); // Add this CSP object to the CSP collection object csps.Add(csp); // Provide key container name, key length and key spec to the private key object pri.ContainerName = "PutYourContainerName"; pri.Length = 1024; pri.KeySpec = X509KeySpec.XCN_AT_KEYEXCHANGE; // Provide the CSP collection object (in this case containing only 1 CSP object) // to the private key object pri.CspInformations = csps; // 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; // 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; }
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; }