2012-02-21 11 views
1

私はポート443でSSL接続を提供するApache(xampp/wamp)サーバーを持っています。 2つの証明書ファイルserver.certとserver.keyを使用します。秘密鍵を別のファイルから取得する方法は?

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

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

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

、パブおよびprivキーは別のファイルにあることから、私は次のように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.受信したメッセージを復号化するために公開鍵を使用する方法と、(暗号化された応答を返すために)秘密鍵で再暗号化する方法はありますか?

ありがとうございます。

マイク

答えて

0

秘密鍵はおそらくPEM encodedPKCS#8構造です。

Monoプロジェクトでは、Mono.Security.dllアセンブリのformat(その他のもの)を読み取るコードが提供されています。このアセンブリは純粋に管理され、Windows、LinuxまたはOSX上で動作します。

0

.NETに直接接続することはできません。

BouncyCastle(この回答を参照:How to read a PEM RSA private key from .NET)、またはPEMファイルからOpenSSLのツールを使用して作成できるusername + passwordの代わりにPKCS12コンテナを使用できます。

+0

こんにちは@Joe、 は、私は次のようやった: 'X509Certificate2 uberCert =新しいX509Certificate2(@ "C:\ xamppの\のapache \ confに\ server.pfx"、 "qwe123"、X509KeyStorageFlags.MachineKeySet);'合成後opensslを使用して両方のキーを1つのpfxファイルにコピーします。プライベートキーが存在するかどうかをチェックすれば真であると答えますが、Base64でエンコードされていないリクエストをどのように解読するのかはわかりません。あなたが提供したリンクを使用しているとき、私はすべて例外を取得しています。任意のヒント? – silicakes

0

私は公開鍵とプライベート(RSA)キーに基づきX509証明書を作成する(opensslkeyに基づいて)小さなヘルパーNuGetパッケージを作成しました。

// Generate with: openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout private.key -out certificate_pub.crt 
string certificateText = File.ReadAllText("certificate_pub.crt"); 
string privateKeyText = File.ReadAllText("private.key"); 

ICertificateProvider provider = new CertificateFromFileProvider(certificateText, privateKeyText); 
X509Certificate2 certificate = provider.Certificate; 

// Example: use the PrivateKey from the certificate above for signing a JWT token using Jose.Jwt: 
string token = Jose.JWT.Encode(payload, certificate.PrivateKey, JwsAlgorithm.RS256); 

、機能とコード例についてNuGetGithub-projectを参照してください。

+1

すごいよ!それは5年も経ちました:) – silicakes

関連する問題