[OPENSSL-1.0.2] SSL 연결 코드 구현
[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);