Создайте CSR в C #, используя явную пару ключей RSA - PullRequest
2 голосов
/ 02 июня 2010

Используя библиотеки 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?

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012

Вы можете использовать библиотеку 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;
        }
    }
}
0 голосов
/ 13 мая 2019

Вот код, используемый для генерации файла .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);
        }
0 голосов
/ 02 июня 2010

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

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

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