2017-06-09 22 views
1

C#/を使用して証明書とキー(どちらもServiceからBase64文字列として受信)を.pfxファイルに結合する方法はありますか? .NET標準プログラムによって?私はそれを自動化する必要があるので、ツールを使用することはオプションではありません。.NET Standard - 証明書と秘密鍵をプログラムで.pfxファイルにマージする

コンテキスト:X509Certificate2オブジェクトに証明書と秘密鍵(ヘッダーとフッターがない別々のBase64文字列)を読み込み、.NET Standard 1.6ライブラリからアプリに渡す必要があります。 .NET標準のX509Certificate2クラスには、PrivateKeyというプロパティがありません。だから私が実際に秘密鍵をX509Certificate2オブジェクトにロードする唯一の方法は、それを.pfxファイルの証明書自体と組み合わせて、それをコンストラクタにロードすることです。

答えて

4

フレームワークタイプでこれを行う方法はありません。 BouncyCastleや他のライブラリでは可能かもしれません。

X509Certificate2 mergedCert = cert.CopyWithPrivateKey(rsaPrivateKey); 
X509Certificate2 mergedCert = cert.CopyWithPrivateKey(dsaPrivateKey); 
X509Certificate2 mergedCert = cert.CopyWithPrivateKey(ecdsaPrivateKey); 

しかし、それはnetcoreapp20(ないnetstandard20)のために特別にコンパイルする必要があります。

.NETコア2.0は、拡張メソッドを介して(新しいX509Certificate2オブジェクトに)一緒に証明書とキーオブジェクトをマージする機能を追加しました。唯一の事前解析された構造(RSAParametersDSAParametersECParameters)から、

フレームワークタイプも(CngKey.Importを除いて、それはWindows上でのみ動作します)バイナリ表現からキーオブジェクトをロードする方法がありません。 。

Linuxでこの目標を達成する最も簡単な方法は、System.Processを使用して、openssl pkcs12 -export -out tmp.pfx -in tmp.cer -inkey tmp.key -password pass:""と同様の呼び出しを生成することです(BouncyCastleが手助けできない場合)。 Windowsでは

あなたは多分その後、変異した証明書にcert.Exportを呼び出すためにCngKey.Importと(CERT_NCRYPT_KEY_HANDLE_PROP_ID(78)のための)P /呼び出しCertSetCertificateContextPropertyを使用することができます。

+0

PFX/PKCS#12は、証明書とキーを連結する以外にはありません。 – jww

+0

@jww本当ですが、(証明書を)PFXに送ると、関連する鍵を取得することができます – bartonjs

+0

@bartonjs BouncyCastleでそれを行う方法の例を教えてください。 – Maxim

関連する問題