gpt4 book ai didi

c# - 在 C# 中以编程方式将证书和私钥转换为 .PFX

转载 作者:可可西里 更新时间:2023-11-01 08:50:00 25 4
gpt4 key购买 nike

我有一个成功的 LetsEncrypt 证书请求输出的 .cer 文件。

我有用于为 LetsEncrypt 创建证书签名请求 (CSR) 的原始私钥。

现在我们需要使用 .NET 以编程方式将这两个文件合并到 IIS 的 PFX 包中

由于我们试图以编程方式执行此操作,pvk2pfx 不切实际,我们希望尽可能避免使用 openssl。

不过,为了演示,我们尝试复制此功能,但使用 CS .NET 而不是 pvk2pfx:pvk2pfx.exe -pvk Server.pvk -spc Server.cer -pfx Server.pfx

我已经进行了详尽的研究,以下是我看到的可能性:

一种方法似乎是使用 X509Certificate2,例如:

// Import the certificate
X509Certificate2 cert = new X509Certificate2("c:\\cert.cer");

// Import the private key
X509Certificate2 cert = new X509Certificate2("c:\\key.pvk");

// Or import the private key - Alternative method
X509DecryptString(token, @"c:\CA.pvk", "mypassword");

// Export the PFX file
certificate.Export(X509ContentType.Pfx, "YourPassword");
File.WriteAllBytes(@"C:\YourCert.pfx", certificateData);

这里有一些其他方法,但它们似乎都省略了有关私钥的部分,或者它们需要 pvk2pfx.exe

从cert文件到pfx文件的转换 https://stackoverflow.com/a/4797392/3693688

如何以编程方式创建 X509Certificate2? http://www.wiktorzychla.com/2012/12/how-to-create-x509certificate2.html

选择、创建和查找 X509 证书: http://www.wou.edu/~rvitolo06/WATK/Demos/HPCImageRendering/code/ImageRendering/AppConfigure/CertHelper.cs

无法将生成的带有私钥的证书导出到字节数组 Cannot export generated certificate with a private key to byte array in .NET 4.0/4.5

如何以编程方式将带有证书链的 pfx 导入证书存储区。 https://stackoverflow.com/a/9152838/3693688

在 C# 中以编程方式导入 .cer 和 .pvk 证书文件以与 netsh http add sslcert 一起使用 https://gist.github.com/BrandonLWhite/235fa12247f6dc827051

cer转pfx证书的方法 https://gist.github.com/domgreen/988684


编辑 1

CryptoGuy 建议我们需要这个链接: https://gist.github.com/BrandonLWhite/235fa12247f6dc827051

这是否意味着像这样的东西会很好?

CSP 部件是必需的吗?

using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography;

var PublicKey = AssemblyUtility.GetEmbeddedFileAsByteArray("Cert.cer");
var PrivateKey = AssemblyUtility.GetEmbeddedFileAsByteArray("PrivateKey.pvk");
var certificate = new X509Certificate2(PublicKey, string.Empty,
X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
var cspParams = new CspParameters
{
ProviderType = 1,
Flags = CspProviderFlags.UseMachineKeyStore,
KeyContainerName = Guid.NewGuid().ToString().ToUpperInvariant()
};
var rsa = new RSACryptoServiceProvider(cspParams);

rsa.ImportCspBlob(ExtractPrivateKeyBlobFromPvk(PrivateKey));
rsa.PersistKeyInCsp = true;
certificate.PrivateKey = rsa;

certificate.Export(X509ContentType.Pfx, "YourPassword");
File.WriteAllBytes(@"C:\YourCert.pfx", certificateData);

最佳答案

CryptoGuy 的回答非常有帮助,为我们指明了正确的方向。

我们仍在努力导入二进制 DER 文件,但这段代码解决了这个问题:

var oc = OpenSSL.X509.X509Certificate.FromDER(bio); 

这些页面很有用:

https://github.com/openssl-net/openssl-net/blob/master/ManagedOpenSsl/X509/X509Certificate.cs

https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2.rawdata

感谢大家的帮助:)

关于c# - 在 C# 中以编程方式将证书和私钥转换为 .PFX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35415353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com