沒有辦法用框架類型來做到這一點。 BouncyCastle或其他庫可能是可能的。
.NET核2.0已經加入到合併經由擴展方法證書和密鑰一起對象(到一個新的X509Certificate2對象)的能力:
X509Certificate2 mergedCert = cert.CopyWithPrivateKey(rsaPrivateKey);
X509Certificate2 mergedCert = cert.CopyWithPrivateKey(dsaPrivateKey);
X509Certificate2 mergedCert = cert.CopyWithPrivateKey(ecdsaPrivateKey);
但這需要專門爲netcoreapp20(未netstandard20)編譯。
框架類型也沒有加載關鍵對象從二進制表示的方式(與CngKey.Import
例外,但僅適用於Windows),只能從預解析結構(RSAParameters
,DSAParameters
,ECParameters
) 。
在Linux上完成此目標的最簡單方法是使用System.Process
產生類似於openssl pkcs12 -export -out tmp.pfx -in tmp.cer -inkey tmp.key -password pass:""
的調用(如果BouncyCastle無法幫到你)。
在Windows上,你也許可以使用CngKey.Import和P/Invoke的CertSetCertificateContextProperty(用於CERT_NCRYPT_KEY_HANDLE_PROP_ID(78))到隨後致電突變證書cert.Export
。
PFX/PKCS#12不僅僅是連接證書和密鑰。 – jww
@jww是真的,但是'cert.Export'(給PFX)一旦你可以得到密鑰關聯就可以處理它 – bartonjs
@bartonjs你能提供一個如何用BouncyCastle做的例子嗎? – Maxim