2013-05-24 9 views
7

Chcę komunikować się między serwerem a klientem za pomocą gniazd przy użyciu biblioteki Bouncy Castle TLS. Przeszedłem przez wiele dokumentacji (która była niewystarczająca dla mnie), ale nie miałem pojęcia, jak to zrobić,Wykorzystanie interfejsu Bouncy Castle TLS API

Używam BouncyCastle v1.7.48 (wersja środowiska wykonawczego = v2.0.50727) Dwójka, i Znalazłem te informacje,

Muszę używać, Org.BouncyCastle.Crypto.Tls namespace i TlsProtocolHandler klasy.

Aby osiągnąć TLS,

  1. co API należy używać w stronie serwera?
  2. jakie API powinienem używać po stronie klienta?

    System.IO.Stream inputStream, outputStream; 
        TlsProtocolHandler tls = new TlsProtocolHandler(inputStream, outputStream); 
    
  3. Jakie są parametry inputStream i outputStream?

public virtual void connect (TlsClient tlsClient);

gdzie TlsClient jest interfejs, a zawiera wiele interfejsy wewnątrz.

4. Jak korzystać z powyższego interfejsu API? Muszę zadeklarować nowe zajęcia i wdrożyć w nich metody dla wszystkich?

Proszę, pomóż mi z tym dmuchanym Zamkiem.

EDIT 1: stworzyłem jedną klasę, która dziedziczy z klasy abstrakcyjnej nazwie DefaultTlsClient. Następnie mógłbym utworzyć instancję mojej klasy i przekazać ją dla odniesienia do interfejsu. Więc mógłbym wysłać parametr w ten sposób. tls.Connect(tlsClient);

Nie inicjuję żadnych parametrów z wyjątkiem wymienionych powyżej. (Gniazda są podłączone przed tą operacją w 2055). Ale nie jestem pewien, czy uścisk dłoni jest kompletny czy nie. Mój program przejdzie do stanu czytania.

+0

Użyj źródła

+0

Nie mogłem znaleźć żadnego testcase, który będzie używał powyższego API. – SHRI

+0

Następnie możesz użyć naszego SecureBlackbox - jest dostarczany z dokumentacją, wsparciem i przykładami. –

Odpowiedz

10

Nie ma interfejsu API TLS po stronie serwera w dmuchanym zamku. Na stronie głównej możesz przeczytać, że obsługują one tylko stronę klienta.

Po stronie klienta już znalazłeś odpowiednie klasy. TlsProtocolHandler wykonuje zadanie, ale nie będzie działać bez niestandardowych klas. Oto przykład kodu:

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

Testowałem to z moim serwerem tcp i otrzymałem witaj klienta.

Należy pamiętać, że jest to protokół TLS w wersji 1.0, więc jeśli potrzebujesz innej wersji lub api serwera, zalecam używanie innej biblioteki (platforma .NET obsługuje protokół TLS).

+1

proszę sprawdzić to: ** 1. Chcę TLS v1.2, nie mogę użyć dmuchanego zamku ** 2. nie ma api po stronie serwera dostępnej dla TLS oznacza, po stronie klienta mogę użyć dmuchanego zamku. Ale po stronie serwera, muszę zaimplementować TLS na TCP przez myslelf lub używając niektórych bibliotek. (Może to być framework .net lub inny) ' – SHRI

+1

Możesz zobaczyć w kodzie źródłowym TlsProtocolHandler.cs" Implementacja wszystkich protokołów wysokiego poziomu w TLS 1.0 "również, że wysyłają nagłówek 0x0301 = wersja 1.0. Chciałbym użyć .NET [SslStream] (http://msdn.microsoft.com/pl-pl/library/system.net.security.sslstream.aspx) zarówno na kliencie, jak i na serwerze. – nefarel

Powiązane problemy