2013-05-24 46 views
7

Ich möchte zwischen Server und Client mithilfe von Sockets mit Hüpfburg TLS-Bibliothek kommunizieren. ich durch viel Dokumentation ging (was für mich nicht ausreichend war), aber ich habe keine Idee, wie dies zu tun,Bouncy Castle TLS API-Nutzung

Ich bin mit BouncyCastle v1.7.48 (Runtime-Version = v2.0.50727) binär, und Ich habe diese Informationen gefunden,

Ich muss Org.BouncyCastle.Crypto.Tls Namespace und TlsProtocolHandler Klasse verwenden.

erreichen TLS-Kommunikation,

  1. was API ich in Server-Seite verwendet werden soll?
  2. welche API sollte ich auf der Client-Seite verwenden?

    System.IO.Stream inputStream, outputStream; 
        TlsProtocolHandler tls = new TlsProtocolHandler(inputStream, outputStream); 
    
  3. Was sind die Parameter inputStream und outputStream?

public virtual void Connect (TlsClient tlsClient);

wo TlsClient ist eine Schnittstelle und dass enthält viele Schnittstellen innen.

4. Wie wird die obige API verwendet? Ich muss neue Klassen deklarieren und Methoden für alle implementieren?

Bitte helfen Sie mir mit dieser Hüpfburg.

EDIT 1: habe ich eine Klasse, die von einer abstrakten Klasse erbt DefaultTlsClient genannt. Dann könnte ich eine Instanz meiner Klasse erstellen und sie für die Schnittstellenreferenz übergeben. So könnte ich den Parameter so senden. tls.Connect(tlsClient);

Ich initialisiere keine Parameter außer den oben genannten. (Sockets sind vor diesen Betrieb auf 2055 verbunden) Aber ich bin nicht sicher, ob Handshake abgeschlossen ist oder nicht. Mein Programm geht in den Lesezustand.

+0

Verwenden Sie die Quelle

+0

Ich konnte keinen Testfall finden, der die obige API verwenden wird. – SHRI

+0

Dann können Sie unsere SecureBlackbox verwenden - sie enthält Dokumentation, Support und Beispiele. –

Antwort

10

In der Hüpfburg gibt es keine serverseitige TLS-API. Sie können auf der Hauptseite lesen, dass sie nur clientseitig unterstützt.

Für die Client-Seite haben Sie schon richtige Klassen gefunden. TlsProtocolHandler macht den Job, aber es wird nicht ohne benutzerdefinierte Klassen funktionieren. Hier ist ein Beispielcode:

// 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(); 
     } 
    } 

Ich habe dies mit meinem TCP-Server getestet und Client hallo erhalten.

Denken Sie daran, es ist TLS in Version 1.0, wenn Sie andere Version oder Server API benötigen, dann empfehle ich andere Bibliothek (.NET Framework unterstützt TLS).

+1

Bitte bestätigen Sie dies: ** 1. Ich möchte TLS v1.2, ich kann Bouncy castle ** '2 nicht benutzen. Es gibt keine serverseitige API für TLS, Clientseite kann ich Hüpfburg benutzen. Aber Server Seite, ich muss TLS auf TCP von myslelf implementieren oder einige Bibliotheken verwenden. (Möglicherweise .net Framework oder einige andere) ' – SHRI

+1

Sie können im Quelltext TlsProtocolHandler.cs sehen" Eine Implementierung aller High-Level-Protokolle in TLS 1.0 "Außerdem senden sie Header 0x0301 = Version 1.0. Ich würde .NET [SslStream] (http://msdn.microsoft.com/pl-pl/library/system.net.security.sslstream.aspx) sowohl im Client als auch im Server verwenden. – nefarel

Verwandte Themen