java获取pfx证书私钥_从PFX文件中读取私钥

我知道,有很多关于此的帖子,但我仍然无法找到解决方案来实现这一点 . 我在我的机器上生成了一个带有 openssl 的PFX文件,如下所示:

openssl x509 -req -days 365 -in "myReqest.csr" -signkey "myPrivateKey.pem" -out "myCertificate.crt"

openssl pkcs12 -export -out "myCertificate.pfx" -inkey "myPrivateKey.pem" -in "myCertificate.crt" -certfile "myCertificate.crt"

在我的C#应用程序中,我像这样访问私钥:

var cert = new X509Certificate2("myCertificate.pfx", "myPassword");

cert.HasPrivateKey; // This is always true!

cert.PrivateKey; // Works on my machine (only)

这完全正常(在我的机器上),但是当我在另一台机器上运行相同的代码时,它会抛出: "Key set not found" ,即使 HasPrivateKey 返回 true !私钥不应该包含在* .pfx文件中吗?你能告诉我吗:

创建时,openssl是否以某种方式自动在我的机器上安装了证书/私钥?

如何从* .PFX文件中读取私钥(或者从* .PEM文件中读取)?

StackTrace异常:

at System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContaier)

at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContaier, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)

at System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()

at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize)

at System.Security.Cryptography.RSACryptoServiceProvider..ctor(CspParameters parameter)

at System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey()

Update:

我发现,以下确实有效:

// on my machine

// read certificate from file (exportable!)

X509Certificate2 cert = new X509Certificate2("filename.pfx", "password", X509KeyStorageFlags.Exportable)

// sign data etc.

((RSACryptoServiceProvider)cert.PrivateKey).SignData(...

// export private key to XML-file

File.WriteAllText("filename.xml", cert.PrivateKey.ToXmlString(true));

// on the other machine

// create new RSA object

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

// import private key from xml

rsa.FromXmlString(File.ReadAllText("filename.xml"));

// verify data etc.

rsa.VerifyData(...

但是,对我来说,这只是一种解决方法,我想以更传统/标准的方式做到这一点!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值