您的位置:首页 > 编程语言 > C#

C#创建一个PKCS#10(p10)的证书请求文件

2013-09-24 17:44 441 查看
CX509PrivateKey pkey=new CX509PrivateKeyClass();

CX509CertificateRequestPkcs10 req=new CX509CertificateRequestPkcs10Class();

try

{

var template =

session.QueryOver<CaTemplate>().Where(o => o.Name == templatename).Take(1).SingleOrDefault();

//加密服务提供者,这里是默认的

var cspName = "Microsoft RSA SChannel Cryptographic Provider";

pkey.ProviderName = cspName;

//提供者类型,与加密服务提供者是一一对应的

pkey.ProviderType=X509ProviderType.XCN_PROV_RSA_SCHANNEL;

//私钥的密钥长度

pkey.Length = (int) template.KeyLength;

pkey.KeySpec = X509KeySpec.XCN_AT_KEYEXCHANGE;

pkey.MachineContext = false;

pkey.ContainerNamePrefix = "IDRIX";

//创建私钥

pkey.ExportPolicy |= X509PrivateKeyExportFlags.XCN_NCRYPT_ALLOW_EXPORT_FLAG | X509PrivateKeyExportFlags.XCN_NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG;

pkey.Create();

}

catch (Exception ex)

{

throw;

}

try

{

req.InitializeFromPrivateKey(X509CertificateEnrollmentContext.ContextMachine, pkey,"");

}

catch (Exception)

{

throw;

}

req.SmimeCapabilities = true;

string dn = "CN={0},E={1},O={2},OU={3},L={4},DC={5},C={6}";

dn = string.Format(dn, name, email, company, department, city, province, country);

req.Subject=new CX500DistinguishedName();

req.Subject.Encode(dn,X500NameFlags.XCN_CERT_X500_NAME_STR);

try

{

req.Encode();

}

catch (Exception)

{

throw;

}

string reqBase64 = req.get_RawData(EncodingType.XCN_CRYPT_STRING_BASE64REQUESTHEADER);

pkey.Close();

return reqBase64;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: