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

 CX509PrivateKey pkey=new CX509PrivateKeyClass();
            CX509CertificateRequestPkcs10 req=new CX509CertificateRequestPkcs10Class();
            try
            {
                var template =
                    session.QueryOver().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;

你可能感兴趣的:(CA证书处理)