[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);
'프로그래밍 > 리눅스 프로그래밍' 카테고리의 다른 글
[VIM] 1. VIM 을 이용한 코드 정리 정규 표현식 (0) | 2018.11.22 |
---|---|
[byteordering] big endian vs little endian (0) | 2018.11.14 |
[OPENSSL-1.0.2] 코드로 알아보는 SSL 통신이해 (2) | 2018.11.13 |
[GDB] 자주 까먹는 GDB 명령어 (0) | 2018.10.04 |
[프로세스간 통신] IPC(inter process communication) 종류 (8) | 2018.09.10 |