2

ポート 443 で SSL 接続を提供する Apache (xampp/wamp) サーバーがあります。これは、server.cert と server.key の 2 つの証明書ファイル (後者が秘密鍵を含む場合) を使用します。

ポート843(フラッシュポリシーのもの)でリクエストをリッスンし、個別に実行されるC#で記述されたテキスト応答で特定のリクエストに応答するように構成された別のサーバーがあります。

SSL 接続を実現するために、SecureSocket と呼ばれるフレックス オブジェクトを使用します。これにより、要求を暗号化するために元のサーバー証明書が使用されます。

私の目標は、送信されたデータを復号化し、返信を暗号化するように 843 C# サーバーに教えることです。このために、C# で X509Certificate オブジェクトを使用しています。

ただし、公開キーと秘密キーは異なるファイルにあるため、次の場合は FALSE になります。

string text = System.IO.File.ReadAllText(@"C:\xampp\apache\conf\ssl.crt\server.crt");
UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] byteCert = encoding.GetBytes(text);
X509Certificate2 uberCert = new X509Certificate2();
uberCert.Import(byteCert);
Console.WriteLine("Has privateKey:" + uberCert.HasPrivateKey.ToString());
Console.WriteLine("PrivateKey: \n" + uberCert.PrivateKey);

明らかに、uberCert.HasPrivateKey の False は、秘密鍵が別のファイルにあるという事実に由来するため、私の質問は次のとおりです。

1.X509CErtificate2 オブジェクトを使用して秘密鍵を読み取るにはどうすればよいですか? 2.受信したメッセージを復号化するために公開鍵を使用する方法と、(暗号化された応答を送り返すために) 秘密鍵で再暗号化する方法を教えてください。

前もって感謝します、

マイク。

4

3 に答える 3

0

ストレート .NET ではできません。

BouncyCastle を使用するか (この回答を参照してください: How to read a PEM RSA private key from .NET )、ユーザー名とパスワードの代わりに PKCS12 コンテナーを使用できます。これは、PEM ファイルから OpenSSL のツールを使用して作成できます。

于 2012-02-21T13:18:37.493 に答える
0

秘密鍵は、PEM でエンコードされた PKCS#8構造である可能性があります。

Mono プロジェクトは、 Mono.Security.dllアセンブリで (特に)この形式を読み取るためのコードを提供します。このアセンブリは純粋に管理されており、Windows、Linux、または OSX で動作します。

于 2012-02-21T13:15:06.830 に答える