ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C# 生成自签名CA证书

2022-06-05 16:34:49  阅读:188  来源: 互联网

标签:证书 C# CA ordering certificateGenerator var new X509Name


C# 生成自签名CA证书

  复制代码
                     string password = "213978863940714";
                    string signatureAlgorithm = "SHA1WithRSA";

                    // Generate RSA key pair
                    var rsaGenerator = new RsaKeyPairGenerator();
                    var randomGenerator = new CryptoApiRandomGenerator();
                    var secureRandom = new SecureRandom(randomGenerator);
                    var keyParameters = new KeyGenerationParameters(secureRandom, 1024);
                    rsaGenerator.Init(keyParameters);
                    var keyPair = rsaGenerator.GenerateKeyPair();

                    // Generate certificate
                    var attributes = new Hashtable();
                    attributes[X509Name.E] = UserInfo.idCard;//设置dn信息的邮箱地址
                    attributes[X509Name.CN] = UserInfo.idCard;//设置证书的用户,也就是颁发给谁
                    attributes[X509Name.O] = "www.shwdztc.com";//设置证书的办法者
                    attributes[X509Name.C] = "Zh";//证书的语言

                    //这里是证书颁发者的信息
                    var ordering = new ArrayList();
                    ordering.Add(X509Name.E);
                    ordering.Add(X509Name.CN);
                    ordering.Add(X509Name.O);
                    ordering.Add(X509Name.C);

                    var certificateGenerator = new X509V3CertificateGenerator();
                    //设置证书序列化号
                    certificateGenerator.SetSerialNumber(BigInteger.ProbablePrime(120, new Random()));


                    //设置颁发者dn信息
                    certificateGenerator.SetIssuerDN(new X509Name(ordering, attributes));


                    //设置证书生效时间
                    certificateGenerator.SetNotBefore(DateTime.Today.Subtract(new TimeSpan(1, 0, 0, 0)));
                    //设置证书失效时间
                    certificateGenerator.SetNotAfter(DateTime.Today.AddDays(365));
                    //设置接受者dn信息
                    certificateGenerator.SetSubjectDN(new X509Name(ordering, attributes));
                    //设置证书的公钥
                    certificateGenerator.SetPublicKey(keyPair.Public);



                    //设置证书的加密算法
                    certificateGenerator.SetSignatureAlgorithm(signatureAlgorithm);
                    certificateGenerator.AddExtension(X509Extensions.BasicConstraints, true, new BasicConstraints(false));
                    certificateGenerator.AddExtension(X509Extensions.AuthorityKeyIdentifier, true, new AuthorityKeyIdentifier(SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(keyPair.Public)));


                    certificateGenerator.AddExtension(X509Extensions.ExtendedKeyUsage.Id, false, new ExtendedKeyUsage(new ArrayList() { new DerObjectIdentifier("1.3.6.1.5.5.7.3.2") }));



                    //创建证书,如果需要cer格式的证书,到这里就可以了。如果是pfx格式的就需要加上访问密码
                    var x509Certificate = certificateGenerator.Generate(keyPair.Private);






                    byte[] pkcs12Bytes = DotNetUtilities.ToX509Certificate(x509Certificate).Export(X509ContentType.Pfx, password);

                    var certificate = new X509Certificate2(pkcs12Bytes, password);

                    certificate.PrivateKey = EncryHelper.ToDotNetKey((RsaPrivateCrtKeyParameters)keyPair.Private);


                    var array = certificate.Export(X509ContentType.Pfx, password);

                    var cerArray = certificate.Export(X509ContentType.Cert);



                    string path = HttpContext.Current.Server.MapPath("~/files/userword/Word/" + UserInfo.idCard + ".pfx");
                    string pathcer = HttpContext.Current.Server.MapPath("~/files/userword/Word/" + UserInfo.idCard + ".cer");

                    FileStream fsCA = new FileStream(path, FileMode.Create);
                    //将byte数组写入文件中
                    fsCA.Write(array, 0, array.Length);
                    fsCA.Close();

                    FileStream fscer = new FileStream(pathcer, FileMode.Create);
                    //将byte数组写入文件中
                    fscer.Write(cerArray, 0, cerArray.Length);
                    fscer.Close();
复制代码

 

     

标签:证书,C#,CA,ordering,certificateGenerator,var,new,X509Name
来源: https://www.cnblogs.com/sexintercourse/p/16344241.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有