我使用bouncyCastle创建证书

        var keypairgen = new RsaKeyPairGenerator();
        keypairgen.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), 1024));

        var keypair = keypairgen.GenerateKeyPair();

        var gen = new X509V3CertificateGenerator();

        var CN = new X509Name("CN=" + certName);
        var SN = BigInteger.ProbablePrime(120, new Random());

        gen.SetSerialNumber(SN);
        gen.SetSubjectDN(CN);
        gen.SetIssuerDN(CN);
        gen.SetNotAfter(DateTime.Now.AddYears(1));
        gen.SetNotBefore(DateTime.Now.Subtract(new TimeSpan(7,0,0,0)));
        gen.SetSignatureAlgorithm("MD5WithRSA");
        gen.SetPublicKey(keypair.Public);

        gen.AddExtension(
            X509Extensions.AuthorityKeyIdentifier.Id,
            false,
            new AuthorityKeyIdentifier(
                SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(keypair.Public),
                new GeneralNames(new GeneralName(CN)),
                SN
            ));

        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(keypair.Private);

最后是
X509Certificate2 certificate = new X509Certificate2(DotNetUtilities.ToX509Certificate((Org.BouncyCastle.X509.X509Certificate)newCert));

现在,因为我的任务告诉我在X509Certificate2对象中同时存储证书和privateKey,所以我需要一种方法将keypair.private转换为X509Certificate2.private。有什么想法吗?
谢谢。

最佳答案

如果您查看this question中的链接,您应该能够使用类似于DotNetUtilities.ToRSA(...)的内容,并将其返回值放入X509Certificate2PrivateKey中。

关于c# - BouncyCaSTLe私钥到X509Certificate2私钥,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6128541/

10-11 15:16