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

[OPENSSL-1.0.2] SSL 연결 코드 구현

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

[OPENSSL-1.0.2] SSL 연결 코드 구현

 

 

1. SSL 연결 개요. 

  - 일반 TCP 연결을 암호화로 감싸는 것이다.

 

2. SSL연결 내부 연결 성립 절차

  1) TCP handshake(TCP 통신을 연결하는 과정을 진행)

    - TCP 3-way hand shake 진행

  2) SSL handshake(SSL 통신을 연결하는 관정을 진행)

    - 클라이언트는 암호 목록 및 임의 값을 보냅니다.

    - 서버가 암호를 선택합니다.

    - 서버는 공개 키와  임의이 값과 함께 인증서를 보냅니다.

    - 클라이언트는 서버 인증서를 확인하고 클라이언트 개인 키로 암호화 된 개인 키

    - 서버는 개인 키를 수락하고 자신의 개인 키를 보냅니다.

 

3. OpeSSL Server 코딩 

  1) OpenSSL 초기화

    (1) 모든 알고리즘 불러오기 

  - OpenSSL_add_all_algorithms();

    (2) 에러 메시지 불러오기 

  - SSL_load_error_strings();

    (3) 통신 프로토콜 선택 

  - method = SSLv2_server_method();

    (4) SSL_CTX 생성 

  - ctx = SSL_CTX_new(method);

    * 초기화 전체 제코드 

      OpenSSL_add_all_algorithms();

      SSL_load_error_strings();

      method = SSLv2_server_method();

      ctx = SSL_CTX_new(method);

 

  2) 인증서 관리

    (1) 인증서 파일 로드 

      - SSL_CTX_use_certificate_file(ctx, CertFile, SSL_FILETYPE_PEM);

    (2) 개인키 로드 

      - SSL_CTX_use_PrivateKey_file(ctx, KeyFile, SSL_FILETYPE_PEM);

    (3) 개인키 검증

      - if (!SSL_CTX_check_private_key(ctx)) {

          fprintf(stderr, “Files don’t match!”);

}

    * 인증서 관리 전체 코드

      SSL_CTX_use_certificate_file(ctx, CertFile, SSL_FILETYPE_PEM);

      SSL_CTX_use_PrivateKey_file(ctx, KeyFile, SSL_FILETYPE_PEM);

      if (!SSL_CTX_check_private_key(ctx)) {

          fprintf(stderr, “Files don’t match!”);

      }

 

 

  3) Server를 SSL에 연결 하기

    (1) SSL 객체 생성

      - SSL *ssl;

    (2) 클라인언트를 SSL 객체에 연결 

      - ssl= SSL_new(ctx);

       SSL_set_fd(ssl, client);

    (3) SSL HandShak 설정

      - SSL_accept(ssl);

    (4) SSL 통신 시작

      - SSL_read(ssl, cmd, cmdlen);

        SSL_write(ssl, reply, replylen);

    * Server를 SSL에 연결하는 전체 코드

      SSL *ssl;

      ssl= SSL_new(ctx);

      SSL_set_fd(ssl, client);

      SSL_accept(ssl);

      SSL_read(ssl, cmd, cmdlen);

      SSL_write(ssl, reply, replylen);

  

    

728x90
반응형