- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个成功的 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
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
感谢大家的帮助:)
关于c# - 在 C# 中以编程方式将证书和私钥转换为 .PFX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35415353/
我是一名优秀的程序员,十分优秀!