2025-11-28 00:35:46 +09:00

93 lines
3.6 KiB
C#

///////////////////////////////////////////////////////////////////////////////
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
//
// Sample to demonstrate how to create a simple certificate request
// using CertEnroll classes.
//
// NOTE: This sample requires Visual Studio 2005. Create a project and
// in the menu click on Project -> Add Reference...
// this will pop a dialog. Click on the COM tab
// Select 'CertEnroll 1.0 Type Library' and click OK.
//
// This will create an interop library which will be used by the C# code.
//
///////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Text;
// Add the CertEnroll namespace
using CERTENROLLLib;
namespace CreateSimpleCertRequest
{
class CreateSimpleCertRequest
{
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;
}
}
}