26

私はウェブからそれをグーグルし、.netのファイルから新しいx509Certificate2を生成するための多くのサンプルを見つけましたが、.netで最初から完全に新しいx509Certificate2を生成する方法を示すサンプルは1つもありません.

.netでそれを行う方法を教えてくれる人はいますか?

どうもありがとうございました。

4

6 に答える 6

18

使用できるコードは次のとおりです。

    static X509Certificate2 GenerateCertificate(string certName)
    {
        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.MaxValue);
        gen.SetNotBefore(DateTime.Now.Subtract(new TimeSpan(7, 0, 0, 0)));
        gen.SetSignatureAlgorithm("MD5WithRSA");
        gen.SetPublicKey(keypair.Public);           

        var newCert = gen.Generate(keypair.Private);

        return new X509Certificate2(DotNetUtilities.ToX509Certificate((Org.BouncyCastle.X509.X509Certificate)newCert));
    }

これを機能させるには、 BouncyCastle ライブラリへの参照を追加することを忘れないでください

于 2012-02-12T15:37:44.323 に答える
2

PINVOKE を使用して Crypt32 を呼び出し、自己署名証明書を作成できます。コードを生成して証明書ストアに配置するサンプル コードがいくつか用意されています。

Keith Brown の証明書ジェネレーターもあります。これはマネージ コードで記述されており、使用できるライブラリがあります

Org.BouncyCastle.X509.X509V3CertificateGeneratorまたは、ユーティリティ メソッド inOrg.BouncyCastle.Security.DotNetUtilitiesおよび callを使用して BouncyCastle を使用することもできますToX509Certificate()

要求を作成し、CA によって署名してもらいたい場合は、.NET の方が実際には簡単です。これらのクラスのほとんどは、COM 相互運用 DLL としてインポートできるからです。しかし、それはまったく別の質問です。

于 2011-07-25T17:29:53.013 に答える
-1

そのAPIを使用してそれを行うことはできないと思います。ただし、Bouncy Castle (http://www.bouncycastle.org) を使用して作成し、後でそのオブジェクトを X509Certificate2 オブジェクトに変換できます (BC にはそれを行うためのユーティリティ クラスがあります)。

-編集- これらの BC クラスを見てみましょう: X509V3CertificateGenerator と X509Certificate

後で BC X509Certificate オブジェクトを通常の X509Certificate2 オブジェクトに変換する BC ユーティリティ クラスは次のとおりです。

于 2011-07-25T17:03:46.903 に答える