93 lines
3.6 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|