Nano Hash - криптовалюты, майнинг, программирование

Создайте CSR на C #, используя явную пару ключей RSA

Используя библиотеки OpenSSL, можно создать CSR (запрос на подпись сертификата), выполнив следующие действия:

openssl genrsa -out rsa.key 1024
openssl req -new -key rsa.key -out output.csr -config config.txt

где config.txt содержит отличительное имя для использования в сертификате.

Я хотел бы сделать что-то подобное под Windows, используя C #. Однако метод createPKCS10 не требует предоставления ключа RSA.

Есть ли способ заставить C # генерировать явный закрытый ключ RSA, а затем использовать этот закрытый ключ для создания CSR?

01.06.2010

  • CSR обычно содержит «Открытый ключ» из вашей пары ключей. Думаю, вы имели в виду именно это. 29.02.2012

Ответы:


1

Для выполнения этой задачи можно использовать библиотеку OpenSSL.NET. Следующие процедуры должны быть тем, что вам нужно:

public static void Main() 
{
    Console.Write(GenerateCsr(GenerateRsaKeyPair()));
}

/// <summary>
/// Generates a 2048 bit RSA key pair.
/// </summary>
/// <returns>The key container</returns>
public static CryptoKey GenerateRsaKeyPair()
{
    using(var rsa = new RSA())
    {
        rsa.GenerateKeys(2048, 0x10021, null, null);
        return new CryptoKey(rsa);
    }
}

/// <summary>
/// Generates a CSR file content using to the hard-coded details and the given key.
/// </summary>
/// /// <param name="key">RSA key to be used</param>
/// <returns>The CSR file content</returns>
public static string GenerateCsr(CryptoKey key)
{
    using (var subject = new X509Name
    {
        SerialNumber = "1234567890",
        Organization = "My Company"
        // Add more details here...
    })
    {
        using (var req = new X509Request(0, subject, key))
        {
            return req.PEM;
        }
    }
}
29.02.2012

2

Вот код, используемый для создания файла .CSR на C #. Я использую библиотеку Bouncy Castle.

        var subjectName = "CN=www.copanyName.com,O=Company Name,OU=Department,T=Area,ST=State,C=Country";

        // Create new Object for Issuer and Subject
        var issuer = new X509Name(subjectName);
        var subject = new X509Name(subjectName);

        // Generate the key Value Pair, which in our case is a public Key
        var randomGenerator = new CryptoApiRandomGenerator();
        var random = new SecureRandom(randomGenerator);
        AsymmetricCipherKeyPair subjectKeyPair = default(AsymmetricCipherKeyPair);
        const int strength = 2048;
        var keyGenerationParameters = new KeyGenerationParameters(random, strength);

        var keyPairGenerator = new RsaKeyPairGenerator();
        keyPairGenerator.Init(keyGenerationParameters);
        subjectKeyPair = keyPairGenerator.GenerateKeyPair();
        AsymmetricCipherKeyPair issuerKeyPair = subjectKeyPair;

        //PKCS #10 Certificate Signing Request
        Pkcs10CertificationRequest csr = new Pkcs10CertificationRequest("SHA1WITHRSA", subject, issuerKeyPair.Public, null, issuerKeyPair.Private);

        //Convert BouncyCastle CSR to .PEM file.
        StringBuilder CSRPem = new StringBuilder();
        PemWriter CSRPemWriter = new PemWriter(new StringWriter(CSRPem));
        CSRPemWriter.WriteObject(csr);
        CSRPemWriter.Writer.Flush();

        //get CSR text
        var CSRtext = CSRPem.ToString();

        // Write content into a Txt file
        using (StreamWriter f = new StreamWriter(@"C:\Cert_TEST\DemoCSR.txt"))
        {
            f.Write(CSRtext);
        }
13.05.2019

3

Мне кажется, вы найдете ответ на свой вопрос здесь: http://msdn.microsoft.com/en-us/library/ms867026.aspx.

Посмотрите Чтение запроса на подпись сертификата с помощью c # для близкий вопрос.

01.06.2010
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..