Как создать совершенно новый x509Certificate2 в .net? - PullRequest
21 голосов
/ 23 февраля 2010

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

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

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

Ответы [ 5 ]

15 голосов
/ 12 февраля 2012

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

    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

3 голосов
/ 25 июля 2011

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

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

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

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

0 голосов
/ 05 апреля 2019
public X509Certificate2 GetCertificate()
{
    var config = InitConfiguration();
    var certificateSubject = "X509Subject";
    var certificateStoreName = "X509StoreName";
    var certificateStoreLocation = "X509StoreLocation";
    var thumbPrint = "ThumbPrint";

    var storeName = (StoreName)Enum.Parse(typeof(StoreName), certificateStoreName, true);
    var storeLocation = (StoreLocation)Enum.Parse(typeof(StoreLocation), certificateStoreLocation, true);

    var certificateStore = new X509Store(storeName, storeLocation);
    certificateStore.Open(OpenFlags.ReadOnly);

    foreach (var storeCertificate in certificateStore.Certificates)
    {
        if (storeCertificate.Thumbprint.ToLower(System.Globalization.CultureInfo.CurrentCulture) == thumbPrint.ToLower(System.Globalization.CultureInfo.CurrentCulture))
        {return storeCertificate;
        }
    }
certificateStore.Close();
    return null;
}
0 голосов
/ 05 апреля 2019

Открыть ssl для создания сертификата x509

1.Загрузите Win64 Openssl по ссылке ниже (Win64 OpenSSL v1.1.0j - установщик 37mb) URL - https://slproweb.com/products/Win32OpenSSL.html

2.После установки установите переменную среды системного пути. (Путь = C: \ OpenSSL-Win64 \ bin)

3. Откройте командную строку и измените каталог на рабочий стол.

4.Команда для создания ключа: Закрытый ключ: openssl req -x509 -days 365 -newkey rsa:2048 -keyout cert-key.pem -out cert.pem Введите команду и следуйте инструкциям.

5. Теперь у нас есть 2 файла с именами cert-key.pem и cert.pem на рабочем столе. Чтобы создать файл .pfx, выполните следующую команду openssl pkcs12 -export -in cert.pem -inkey key.pem out -x509-cert.pfx и следуйте инструкциям (введите тот же пароль).

6.Команда для создания открытого ключа: openssl pkcs12 -in x509-cert.pfx -clcerts -nokeys -out x509-cert-public.pem и следуйте инструкциям.

7. Зарегистрируйте сертификат в mmc.

0 голосов
/ 25 июля 2011

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

-edit- Взгляните на следующие классы BC: X509V3CertificateGenerator и X509Certificate

Вспомогательный класс BC, который впоследствии преобразует объект BC X509Certificate в обычный объект X509Certificate2, имеет вид: DotNetUtilities

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...