2013-05-24 3 views
7

탄력성 TLS 라이브러리를 사용하여 소켓을 사용하여 서버와 클라이언트간에 통신하고 싶습니다. 내가 (나를 위해 불충분) 많은 문서를 통해 갔다하지만 난 BouncyCastle의 v1.7.48 (런타임 버전 = 2.0.50727) 이진, 을 사용하고Bouncy Castle TLS API 사용법

, 어떻게이 작업을 수행하는 어떤 생각을하지 않았고 이 정보를 찾았습니다.

Org.BouncyCastle.Crypto.Tls 네임 스페이스와 TlsProtocolHandler 클래스를 사용해야합니다.

, 나는 서버 측에 무엇을 사용해야 API

  1. 을 TLS 통신을 달성하기 위해?
  2. 클라이언트 측에서 사용해야하는 API는 무엇입니까?

    System.IO.Stream inputStream, outputStream; 
        TlsProtocolHandler tls = new TlsProtocolHandler(inputStream, outputStream); 
    
  3. 매개 변수 inputStreamoutputStream은 무엇입니까?

공공 가상 무효 연결 (TlsClient tlsClient);

, TlsClient인터페이스이며 많은 인터페이스 내부 을 포함한다.

4. 위의 API 사용 방법은 무엇입니까? 새로운 클래스를 선언하고 그 안에 메소드를 구현해야합니다.

이 탄력있는 성으로 도와주세요.

편집 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 서버에서 테스트하여 클라이언트 안녕하십니까.

버전 1.0에서는 TLS이므로 다른 버전이나 서버 API가 필요한 경우 다른 라이브러리를 사용하는 것이 좋습니다 (.NET Framework에서 TLS를 지원함).

+1

확인해주십시오. ** 1. TLS v1.2를 원한다. Bouncy castle **'2를 사용할 수 없다. 거기에 아무 서버 쪽 API를 사용할 수 TLS 의미, 클라이언트 쪽 나는 탄력 성을 사용할 수 있습니다. 그러나 서버 쪽, 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

관련 문제