Подтвердить что ты не робот

Как создать совершенно новый x509Certificate2 в .net?

Я перебираю его из Интернета, нахожу много образцов для создания нового x509Certificate2 из файла в .net, но нет ни одного примера, чтобы показать, как создать полностью новый x509Certificate2 с самого начала в .net.

Есть ли кто-нибудь, кто может сказать мне, как это сделать в .net?

Большое спасибо.

4b9b3361

Ответ 1

Здесь код, который вы можете использовать:

    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

Ответ 2

Вы можете использовать PINVOKE для вызова в Crypt32 в создать самоподписанный сертификат. Существует несколько пример кода, который будет генерировать один и помещать его в хранилище сертификатов для вас.

Там также Keith Brown генератор сертификатов, который написан в управляемом коде и библиотеку, которую вы можете использовать.

В качестве альтернативы вы можете просто использовать BouncyCastle с помощью Org.BouncyCastle.X509.X509V3CertificateGenerator и использовать утилиты в Org.BouncyCastle.Security.DotNetUtilities и вызвать ToX509Certificate().

Если вы хотите создать запрос и подписали его CA, что на самом деле проще в .NET, так как большинство этих классов могут быть импортированы как DLL файлы COM-взаимодействия. Но это еще один вопрос.

Ответ 3

Я думаю, вы не можете сделать это, используя этот API. Но вы можете создать его с помощью Bouncy Castle (http://www.bouncycastle.org), а затем преобразовать этот объект в объект X509Certificate2 (для этого BC имеет некоторый класс утилиты).

-edit- Взгляните на эти классы BC: X509V3CertificateGenerator и X509Certificate

Класс утилиты BC, который позже преобразует объект BC X509Certificate в обычный объект X509Certificate2: DotNetUtilities