2013-05-24 5 views
7

Я хочу общаться между сервером и клиентом, используя сокеты, используя библиотеку TLS-библиотеки. Я прошел через много документации (что было недостаточно для меня), но я не получил ни малейшего представления, как это сделать,Bouncy Castle TLS API-интерфейс

Я использую BouncyCastle v1.7.48 (среда версия = v2.0.50727) двоичный, и Я нашел эти данные,

Я должен использовать, Org.BouncyCastle.Crypto.Tls namespace и TlsProtocolHandler класс.

Для достижения TLS связи,

  1. , что API я должен использовать в стороне сервера?
  2. Какой API я должен использовать на стороне клиента?

    System.IO.Stream inputStream, outputStream; 
        TlsProtocolHandler tls = new TlsProtocolHandler(inputStream, outputStream); 
    
  3. Каковы параметры inputStream и outputStream?

публичный виртуальный аннулируются Connect (TlsClient tlsClient);

, где, TlsClient является интерфейс, и что содержит много интерфейсов внутри.

4. Как использовать вышеуказанный API? Я должен объявлять новые классы и внедрять методы внутри этого для всех?

Пожалуйста, помогите мне с этим Bouncy Castle.

EDIT 1: Я создал один класс, который наследуется от абстрактного класса под названием DefaultTlsClient. Тогда я мог бы создать экземпляр моего класса и передать его для ссылки на интерфейс. Так что я мог бы отправить этот параметр. tls.Connect(tlsClient);

Я не инициализирую никаких параметров, кроме упомянутых выше. (Розетки подключены до этой операции на 2055) Но я не уверен, что рукопожатие завершено или нет. Моя программа перейдет к состоянию чтения.

+0

Использование источника

+0

Я не смог найти тестовый файл, который будет использовать вышеуказанный API. – SHRI

+0

Затем вы можете использовать наш SecureBlackbox - он поставляется с документацией, поддержкой и образцами. –

ответ

10

В бодрящем замке нет серверного TLS API. Вы можете прочитать на главной странице, что они поддерживают только клиентскую сторону.

На стороне клиента вы уже нашли подходящие классы. TlsProtocolHandler выполняет эту работу, но она не будет работать без пользовательских классов. Вот пример кода:

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

Я тестировал это на своем сервере tcp и получил приветствие клиента.

Имейте в виду, что это TLS в версии 1.0, поэтому, если вам нужна другая версия или сервер api, тогда я рекомендую использовать другую библиотеку (.NET framework поддерживает TLS).

+1

подтвердите это: ** 1. Я хочу TLS v1.2, я не могу использовать Bouncy castle ** '2. нет серверной стороны api, доступной для средств TLS, на стороне клиента я могу использовать замок Bouncy. Но на стороне сервера я должен реализовать TLS на TCP с помощью myslelf или использовать некоторые библиотеки (может быть .net framework или какой-либо другой) ' – 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

Смежные вопросы