C# 如何使用openssl创建与X509Certificate2兼容的pfx
我正在尝试创建一个RSA密钥对,可以使用OpenSSL与C# 如何使用openssl创建与X509Certificate2兼容的pfx,c#,.net,openssl,C#,.net,Openssl,我正在尝试创建一个RSA密钥对,可以使用OpenSSL与System.Security.Cryptography.X509Certificates.X509Certificate2一起使用 我设法生成的PFX给了我这个堆栈跟踪 创建一个未加密的私钥(我意识到这不是最佳做法) openssl genrsa-out private.pem 2048 从私钥创建公钥 openssl rsa-in private.pem-outform pem-pubout-out public.pem 从私钥创建证书
System.Security.Cryptography.X509Certificates.X509Certificate2
一起使用
我设法生成的PFX给了我这个堆栈跟踪
创建一个未加密的私钥(我意识到这不是最佳做法)
openssl genrsa-out private.pem 2048
从私钥创建公钥
openssl rsa-in private.pem-outform pem-pubout-out public.pem
从私钥创建证书文件
openssl-req-x509-key private.pem-out cert.pem-days 365-nodes-subc”/C=US/ST=Colorado/L=Colorado Springs/O=Contoso/OU=Security/CN=mypurpose.Contoso.org“
使用自签名证书创建pfx文件
openssl pkcs12-in cert.pem-inkey private.pem-export-out combined.pfx
提示输入密码以保护pkcs
正在尝试使用实例化X509Certificate2的实例
新的X509Certificate2(@“C:\path\to\combined.pfx”,“password”,X509keystrageFlags.Exportable)代码>
堆栈跟踪告诉了我一切
at System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromFile(String fileName, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx)
at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(String fileName, Object password, X509KeyStorageFlags keyStorageFlags)
这意味着我的PFX文件中没有证书,因为我在openssl pkcs12
命令中使用了-nocerts
在密码学中,PKCS#12定义了用于存储的归档文件格式
许多加密对象作为单个文件。它通常用于
将私钥与其X.509证书捆绑,或将所有
信任链的成员
pkcs12文件确实希望包含除私钥/公钥之外的内容,它需要一个X.509证书;即:
- 证书版本
- 序列号
- 签名算法
- 发行人
- 有效期不在之前
- 有效期不在之后李>
这是我想要的最后一个命令:
openssl pkcs12-in cert.pem-inkey private.pem-export-clcerts-out combined.pfx-passout pass:
这允许我使用以下代码进行实例化:
new X509Certificate2(@“C:\path\to\combined.pfx”,(字符串)null,X509KeyStrageFlags.Exportable)代码>
我正在使用一些附加代码加载由openssl genrsa
和openssl rsa
生成的private.pem和public.pem,此处:。
此代码正在将原始PEM数据(仅私钥/公钥)加载到RSACryptServiceProvider
实例中,该实例可用于加密和解密
at System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromFile(String fileName, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx)
at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(String fileName, Object password, X509KeyStorageFlags keyStorageFlags)