9

X509Certificate2 を .p12 ファイルでビルドする C# コードを使用し、コンストラクターで証明書へのパス、証明書のパスワードを挿入します。また、以下に示すように、エクスポート可能としてマークしました。

X509Certificate2 x509Certificate2 = new X509Certificate2
("...\\MyCerificate.p12", "P@ssw0rd", X509KeyStorageFlags.Exportable);

次のようにして、秘密鍵を AsymmetricAlgorithm 形式で取得します。

x509Certificate2.PrivateKey

ここで、証明書から秘密鍵をBase64形式で取得したいと考えていますが、それを行う方法がわかりません。これは私たちにとって非常に重要です。

4

4 に答える 4

6

重要な質問は、なぜbase64なのかということです。

これが独自のアプリケーション用である場合は、秘密鍵を XML 文字列として保持できます (はるかに簡単です :-)。

string xml = x509Certificate2.PrivateKey.ToXmlString (true);

base64が必要な場合(これもアプリケーション用)、キー (RSAParameters) をエクスポートしてから、すべてbyte[]を連結し、マージされた出力を base64 文字列に変換できます。

ただし、 base64秘密鍵を必要とする他のアプリケーションと相互運用する場合は、 ( base64文字列内の) 形式を知る必要があります。たとえば、多くの場合、秘密鍵はPEMでエンコードされています (これは、特別なヘッダー/フッターを備えた base64 です。 のを参照してくださいX509Certificate)。

それがあなたが探しているものである場合は、最初にPKCS#8構造内で秘密鍵をエンコードする必要があります。次に、base64 に変換してヘッダー/フッターを追加します。Mono.Security.dll (Mono プロジェクトの MIT.X11 ライセンス コード)内で、これを行うための役立つコードを見つけることができます。

于 2011-10-10T17:15:28.583 に答える
4

X509Certificate2 の PrivateKey プロパティを使用するだけです。実際に返される秘密鍵の実装は、証明書で使用されるアルゴリズムによって異なります。通常、これは RSA です。

rsaObj = (RSACryptoServiceProvider)myCertificate.PrivateKey; 

その後、ExportParameters プロパティから RSA キー情報を取得できるはずです。

于 2011-10-10T13:51:48.040 に答える
-4

唯一の問題が秘密鍵Base64をエンコードすることである場合は、次のようにすることができます。

var privateKey = x509Certificate2.PrivateKey;
var encoding = new System.Text.ASCIIEncoding();
var base64String = Convert.ToBase64String(encoding.GetBytes(privateKey.ToString()));
于 2011-10-10T14:01:48.810 に答える