【问题标题】:How to change issuer Name while creating X509Certificate2 in C#如何在 C# 中创建 X509Certificate2 时更改颁发者名称
【发布时间】:2013-07-28 19:44:14
【问题描述】:

我正在我的 C#.net 应用程序中创建 X509Certificate2 证书。创建证书时,如何设置颁发者名称?当前发行者名称显示与主题名称相同。

请帮忙。

【问题讨论】:

    标签: c# .net certificate x509certificate2


    【解决方案1】:

    嗯。

    最后我使用了Bouncy Castle dll来创建证书。使用它,有一种方法可以设置颁发者名称。

    这是生成 x509Certificate 并存储到 Trusted People 商店的完整代码:

     private X509Certificate2 GeneratePFXFile(string certificate,string company,string   email,string state,string locality,string username,string country)
        {
            X509Certificate2 cert = null;
            try
            {
                var kpgen = new RsaKeyPairGenerator();
    
                kpgen.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), 2048));
    
                var kp = kpgen.GenerateKeyPair();
    
                var gen = new X509V3CertificateGenerator();
    
                var certName = new X509Name("CN=" + certificate);
                var issuer = new X509Name("C="+country+",O="+company+",OU=LBC Mundial Corp.USA,E="+email+",L="+locality+",ST="+state);
                var serialNo = BigInteger.ProbablePrime(120, new Random());
    
                gen.SetSerialNumber(serialNo);
                gen.SetSubjectDN(certName);
                gen.SetIssuerDN(issuer);
                gen.SetNotAfter(DateTime.Now.AddYears(50));
                gen.SetNotBefore(DateTime.Now);
                gen.SetSignatureAlgorithm("MD5WithRSA");
                gen.SetPublicKey(kp.Public);
    
                gen.AddExtension(
                    X509Extensions.AuthorityKeyIdentifier.Id,
                    false,
                    new AuthorityKeyIdentifier(
                        SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(kp.Public),
                        new GeneralNames(new GeneralName(certName)),
                        serialNo));
    
                gen.AddExtension(
                    X509Extensions.ExtendedKeyUsage.Id,
                    false,
                    new ExtendedKeyUsage(new ArrayList() { new DerObjectIdentifier("1.3.6.1.5.5.7.3.1") }));
    
                var newCert = gen.Generate(kp.Private);
                byte[] pfx = DotNetUtilities.ToX509Certificate(newCert).Export(System.Security.Cryptography.X509Certificates.X509ContentType.Pfx, (string)null);
    
                X509Store store = new X509Store((StoreName)StoreName.TrustedPeople, (StoreLocation)StoreLocation.LocalMachine);
                store.Open(OpenFlags.ReadWrite);
    
                cert = new X509Certificate2(pfx,(string)null, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
    
                store.Add(cert);
                store.Close();
            }
            catch (Exception ex)
            {
                ShowError(ex.Message);
                return null;
            }
            return cert;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-22
      • 2013-07-28
      • 1970-01-01
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      相关资源
      最近更新 更多