프로그래밍/리눅스 프로그래밍

[OPENSSL-1.0.2] 코드로 알아보는 SSL 통신이해

jinkwon.kim 2018. 11. 13. 11:03
728x90
반응형

[OPENSSL-1.0.2] 코드로 알아보는 SSL/TLS 통신이해

 

 

 

1. SSL 통신을 위해 필요한 구조체

  1) SSL_CTX(SSL Context)(전역 구조체)

    (1) Global context 구조체

    (2) SSL_CTX는 SSL 응용프로그램당 1개면 충분합니다.

    (3) SSL 구조체들에 대한 기본값을 저장하며, 연결을 위해 만들어집니다.

    (4) 연결과 세션에 대한 기본 정보를 갖고 있습니다.

        - SSL 연결 개수, 재협상, 세션 재개

    (5) ssl.h 에 정의 되어 있습니다. 

        - 버전별 정의

            - OpenSSL_1_0_2

    - 선언

                    - ssl/ssl.h : typedef struct ssl_st SSL; 

            - OpenSSL_1_1_1-stable cadb6f0e32

                - 선언 

                    - include/openssl/ossl_typ.h 

                       - typedef struct ssl_ctx_st SSL_CTX;

                - 정의

                    - ssl/ssl_local.h 에 정의

                        - struct ssl_ctx_st

 

  2). SSL 구조체

    (1) SSL API에서 사용되는 메인 구조체 입니다.

    (2) SSL 구조체는 SSL_CTX를 생성 및 설정한후 만들어 져야합니다.

    (3) SSL은 SSL_CTX의 기본값을 상속하여 만들어 집니다.

    (4) 모든 SSL 연결에서 항상 필요 합니다.

    (5) 새로운 SSL 연결 마다 생성 됩니다. 

    (6) SSL 연결 및 세션에 대한 정보를 가지고 있는 구조체를 갖고 있습니다.

       - SSL 구조체 항목 

        A. SSL_CTX - 미리 생성한 SSL_CTX 정보를 갖고 있습니다.

            - SSL_CTX *ctx;

        B. SSL_METHOD - SSL Protocol Version

        C. SSL_SESSION  - SSL 세션 정보 

        D. SSL_CIPHER - SSL 암호화 정보 

        E. CERT - x.509 구조의 인증서 정보 

        F. BIO - SSL 연결 수행은 BIO를 통해서 합니다.

        G. ssl.h 에 정의 되어 있습니다. 

-  ssl/ssl.h : typedef struct ssl_st SSL; 

  

3. SSL_CTX 구조체 VS SSL 구조체 

  1) SSL_CTX 구조체는 변경되지 않는 설정을 저장합니다.

    (1) 키

    (2) 인증서 

    (3) CA

    (4) cipherlist(암호화 리스트)

    (5) SSL 연결을 위한 공유된 상태(예: 재사용가능한 세션의 cashe)

    (6) 기타 등등..

    

  2) 각 SSL 객체(SSL 구조체로 만든것)는 하나의(활성)연결 대한 상태를 처리하고 포함.

    (1) TCP 연결을 위한 일시적인 핸드 셰이크 값, nonces, 파생 키, 부분 레코드 버퍼,

    시퀀스 카운터, HMAC 상태 및 BIO(s)

 

4.SSL 구조체 구조 상세 설명

  1) SSL_METHOD 구조체 

    - SSL 라이브러리 함수를 가리킵니다. 이 함수들은 여러 버전으로 구현되어있습니다.

      (SSLv2, TLSv1 등)

    - SSL_METHOD 구조체는 SSL_CTX를 만들때 필요 합니다.

    - ssl.h 에 정의되어 있습니다. 

 

  2) SSL_SESSION 구조체

    - 한개의 연결에 대한 현재 TLS/SSL 세션의 상세 정보를 갖고 있습니다. 

      : SSL_CIPERS, client / server 인증서, 키 등

 

  3) CERT/X509 구조체

    - 인증을 위한 정보를 x.509 구조체 형태로 가지고 있습니다.

    - 인증서 정보블 인증서에서 추출합니다.

 

  4) BIO 구조체

    - BIO 구조체는 SSL 애플리케이션의 I / O 스트림 추상화입니다.

    - 통신에 대한 세부 정보를 캡슐화합니다.

    - TLS / SSL의 밑에 있는 TCP 연결을 다룹니다.

    - 클라이언트와 서버 간의 통신이 BIO 구조를 통해 수행됩니다.

    - BIO 구조체는 bio.h 에 정의 되어있습니다.

  

  5) SSL_CIPHER 구조체 

    - 특정의 암호화 알고리즘에 대한 정보를 갖고 있습니다. 

    - 이용가능한 암호들은 SSL_CTX에 설정되어 있습니다.

    - 실제로 사용된 것들은 SSL_SESSION에 있습니다.

  

4. SSL-server와 SSL-Client 통신 방법

 

 

  

5. OpenSSL 구조체 생성과 종료

  - 아래 표를 통해서 구조체별 생성 함수와 파괴 함수를 확인 할수 있다. 

 

 

 

참조 문서 : http://www.kt.agh.edu.pl/~pacyna/lectures/secure_corporate_networks/lab/lab3/pacyna-scn-lab-openssl-programming.pdf

728x90
반응형