Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用openssl创建与X509Certificate2兼容的pfx_C#_.net_Openssl - Fatal编程技术网

C# 如何使用openssl创建与X509Certificate2兼容的pfx

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 从私钥创建证书

我正在尝试创建一个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

从私钥创建证书文件

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)