使用显式RSA密钥对在C#中创建CSR

使用显式RSA密钥对在C#中创建CSR,c#,windows,C#,Windows,使用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?在我看来,

使用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?

在我看来,您可以在这里找到问题的答案:

请看下面的问题。

您可以使用库来完成此任务。以下例行程序应该是您所需要的:

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;
        }
    }
}
publicstaticvoidmain()
{
Write(GenerateCsr(GenerateRsaKeyPair());
}
/// 
///生成2048位RSA密钥对。
/// 
///密钥容器
公共静态加密密钥生成器MakeyPair()
{
使用(var rsa=new rsa())
{
rsa.GenerateKeys(2048,0x10021,null,null);
返回新的加密密钥(rsa);
}
}
/// 
///使用硬编码的详细信息和给定的密钥生成CSR文件内容。
/// 
//////要使用的RSA密钥
///CSR文件内容
公共静态字符串生成器CSR(加密密钥)
{
使用(var subject=new X509Name)
{
SerialNumber=“1234567890”,
组织=“我的公司”
//在这里添加更多详细信息。。。
})
{
使用(var req=新的X509请求(0,主题,键))
{
返回请求PEM;
}
}
}

以下是用于在C#中生成.CSR文件的代码。我正在使用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);
        }

CSR通常包含密钥对中的“公钥”。我猜你是那个意思。