生成base-64编码的X509证书对(公钥/私钥)

3

我想动态生成RSA X509公/私钥,以下是我使用openssh命令行的方法:

openssl genrsa -out privatekey.pem 1024
openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 1825
openssl pkcs12 -export -out public_privatekey.pfx -inkey privatekey.pem -in publickey.cer

还有,我如何添加密码短语以加密私钥?

到目前为止,我只完成了这一部分。

//Generate a public/private key pair.  
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

//Save the public key information to an RSAParameters structure.  
RSAParameters rsaKeyInfo = rsa.ExportParameters(true);

我曾使用过这个类,但它并没有产生有效的SSL,在我将其提交给开发者门户时,它没有被接受为有效的公钥:developer.xero.com/myapps。

敬礼


需要澄清:您是否只想从RSAParameters创建证书? - Igor B
请告诉我什么是参数,我不确定标准X509格式中是否缺少其他参数?我需要执行openssl在命令行中的操作。 - Mason.Chase
1个回答

3
请注意,我已经用推荐的跨平台 RSA 基类替换了 RSACryptoServiceProvider 类,它也是更好的 RSA 实现。此外,这篇文章 也提供了良好的 RSA 实现。
这个 SO 问题 让我找到了正确的方向。
using (var rsa = RSA.Create(1024))
{
    var distinguishedName = new X500DistinguishedName($"CN=SelfSignedCertificate");
    var request = new CertificateRequest(distinguishedName, rsa, HashAlgorithmName.SHA256,RSASignaturePadding.Pkcs1);
    var certificate = request.CreateSelfSigned(DateTimeOffset.Now, DateTimeOffset.Now.AddDays(1825));

    // Create PFX (PKCS #12) with private key
    File.WriteAllBytes("privatekey.pfx", certificate.Export(X509ContentType.Pfx, "RGliXtaLkENste"));

    // Create Base 64 encoded CER (public key only)
    File.WriteAllText("publickey.cer",
        "-----BEGIN CERTIFICATE-----\r\n"
        + Convert.ToBase64String(certificate.Export(X509ContentType.Cert), Base64FormattingOptions.InsertLineBreaks)
        + "\r\n-----END CERTIFICATE-----");
}

我在xero上测试了生成的.cer文件,所以它应该可以工作。


1
我已经使用了这个类,但它没有产生有效的SSL。当我将其提交到开发者门户时,它未被接受为有效的公钥:https://developer.xero.com/myapps/ - Mason.Chase
@Mason.Chase 我已经更新了我的答案,以生成一个.cer和一个.pfx文件,我还上传了.cer文件到一个演示的xero应用程序。 - user7944473
嗨,Elphas,感谢您的回答,我该如何以PEM格式导出私钥? - Mason.Chase
@Mason.Chase 你需要从RSA提供程序中导出参数,并使用我在之前编辑中添加的算法来生成PEM文件。我会在某个时候重新添加生成文件的方法。 - user7944473

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接