2013-05-24 50 views
7

bouncy castle TLSライブラリを使用してソケットを使用してサーバーとクライアントの間で通信したい。 は私が(私のために不十分であった)多くのドキュメントを経たが、私は、私ははBouncyCastleのv1.7.48(ランタイムバージョン= v2.0.50727の)バイナリ、 を使用していますBouncy Castle TLS APIの使用

、これを行う方法の任意のアイデアを取得していないと私はこれらの情報を見つけました

私はOrg.BouncyCastle.Crypto.Tls名前空間とTlsProtocolHandlerクラスを使用する必要があります。 TLS通信を実現するために

、私はサーバ側で使用する必要がありますどのようなAPI

  1. クライアント側で使用するAPIは何ですか?

    System.IO.Stream inputStream, outputStream; 
        TlsProtocolHandler tls = new TlsProtocolHandler(inputStream, outputStream); 
    
  2. パラメータinputStreamoutputStreamは何ですか?

パブリック仮想空接続(TlsClient tlsClient)。

TlsClientインターフェースあり、多くインターフェイス内部を含有します。

4.上記のAPIの使い方は?私は新しいクラスを宣言し、その中にメソッドを実装する必要がありますか?

このBouncy Castleを手伝ってください。

EDIT 1: 私はDefaultTlsClientという抽象クラスから継承する1つのクラスを作成しました。 次に、クラスのインスタンスを作成し、インタフェース参照のために渡すことができました。 私はこのようなパラメータを送ることができました。 tls.Connect(tlsClient);

私は上記以外のパラメータを初期化していません。 (これらの操作の前に2055年にソケットが接続されています) しかし、ハンドシェイクが完了したかどうかはわかりません。私のプログラムは読書状態になります。

+0

ソースを使用する

+0

上記のAPIを使用するテストケースが見つかりませんでした。 – SHRI

+0

SecureBlackboxを使用することができます。これには、ドキュメンテーション、サポート、サンプルが付属しています。 –

答えて

10

bouncy castleにはサーバー側のTLS APIはありません。クライアント側でのみサポートするメインページを読むことができます。

クライアント側では、すでに適切なクラスが見つかりました。 TlsProtocolHandlerはジョブを実行しますが、カスタムクラスなしでは機能しません。私は私のTCPサーバでこれをテストし、クライアントのhelloを受けている

// Need class with TlsClient in inheritance chain 
    class MyTlsClient : DefaultTlsClient 
    { 
     public override TlsAuthentication GetAuthentication() 
     { 
      return new MyTlsAuthentication(); 
     } 
    } 

    // Need class to handle certificate auth 
    class MyTlsAuthentication : TlsAuthentication 
    { 
     public TlsCredentials GetClientCredentials(CertificateRequest certificateRequest) 
     { 
      // return client certificate 
      return null; 
     } 

     public void NotifyServerCertificate(Certificate serverCertificate) 
     { 
      // validate server certificate 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      TcpClient client = new TcpClient(); 

      client.Connect(IPAddress.Loopback, 6000); 

      // input/output streams are deprecated, just pass client stream 
      TlsProtocolHandler handler = new TlsProtocolHandler(client.GetStream()); 

      handler.Connect(new MyTlsClient()); 

      // handshake completed 
      // use handler.Stream.Write/Read for sending app data 

      Console.ReadLine(); 
     } 
    } 

:ここではサンプルコードです。

バージョン1.0ではTLSなので、他のバージョンやサーバーAPIが必要な場合は、他のライブラリを使用することをお勧めします(.NETフレームワークはTLSをサポートしています)。

+1

これを確認してください:** 1。私はTLS v1.2を望んでいます。私はBouncy castle ** '2を使うことはできません。クライアントサイドでBouncy castleを使用することができます。しかし、サーバー側では、myslelfまたはいくつかのライブラリを使ってTCP上にTLSを実装する必要があります(.netフレームワークかその他かもしれません)。 – SHRI

+1

ソースコードTlsProtocolHandler.csで見ることができます "TLS 1.0のすべての高水準プロトコルの実装"彼らはヘッダー0x0301 =バージョン1.0で送信することもできます。私はクライアントとサーバーの両方で.NET [SslStream](http://msdn.microsoft.com/pl-pl/library/system.net.security.sslstream.aspx)を使用します。 – nefarel

関連する問題