티스토리 뷰

C++

[C++] OpenSSL SSL_CTX관련

xaida 2017. 11. 27. 17:26

void SSL_load_error_strings(void);
void OpenSSL_add_all_algorithms(void);
void ERR_load_BIO_strings(void);
이 함수들은 OpenSSL 초기화와 관련된 함수들입니다.

OpenSSL은 통신에 관련된 모든 함수들을 포함하고 있기 때문에 비 보안 연결을 위한 통신 역시 연관된 함수들을 사용할 수 있습니다.

연결 관련 함수

비 보안 연결을 위한 함수로는 BIO_new_connect() 함수와 BIO_new_accept() 함수가 있습니다. connect 함수는 연결을 시도하는 함수이고, accept() 함수는 listen을 하는 함수로 보입니다.
두 함수의 원형은 아래와 같습니다.

#include <openssl/bio.h>

BIO *BIO_new_connect(char *hostinfo);
BIO *BIO_new_accept(char *hostinfo);

이 함수가 성공하면 BIO 구조체의 주소값을 리턴하며, 실패하면 NULL을 리턴합니다. 이 함수들로 BIO 객체를 생성했다면 BIO_do_connect(), BIO_do_accept() 함수를 호출합니다.

#include <openssl/bio.h>

int BIO_do_connect(BIO *bio):
int BIO_do_accept(BIO *bio);

읽기/쓰기 함수

#include <openssl/bio.h>

int BIO_read(BIO *b, void *buf, int len);
int BIO_write(BIO *b, const void *buf, int len);
int BIO_gets(BIO *b, char *buf, int size);
int BIO_puts(BIO *b, const char *buf);

위 함수들은 read(), write(), gets(), puts() 함수와 동일한 방법으로 사용됩니다. 에러가 발생한다면 0이나 -1을 리턴하고, select(), poll()과 같은 입출력 다중화 함수와 함께 사용이 가능합니다.

보안 연결을 위한 추가 함수

보안 연결을 하기 위해서는 몇 가지 추가적인 작업이 필요합니다.

#include <openssl/ssl.h>

SSL_CTX *SSL_CTX_new(SSL_METHOD *method);
int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath);

SSL_CTX_new는 TLS/SSL 연결을 할 수 있는 SSL_CTX 객체를 생성합니다. 연결 방식은 method 변수에 의해 결정됩니다. SSLv2와 SSLv3를 모두 사용하기 위해서는 SSLv23_client_method(void), 서버에서는 SSLv23_server_method(void)를 사용하면 됩니다. SSLv2는 SSLv2_client_method(void)/SSLv2_server_method(void)를 사용할 수 있습니다. TLS를 이용하려 한다면 SSL부분을 TLS로 변경하면 됩니다.

SSL_CTX_load_verify_locations() 함수는 CTX 객체에서 참조할 CA 증명서 파일의 위치를 알려주기 위해 사용합니다. CAfile은 파일의 이름이고 CApath는 경로입니다. 일반적으로 /usr/share/ssl/ 의 경로에 사용가능한 CA 파일이 존재합니다.

CTX객체를 로드하고 성공적으로 CAfile을 로드했으면, ctx를 이용해서 ssl 연결을 생성해야 합니다. 이를 위해서 BIO_new_ssl_connect() 함수를 사용합니다.

BIO *BIO_new_ssl_connect(SSL_CTX *ctx);

마지막으로 ssl 연결 모드를 설정해 주면 됩니다.

BIO_get_ssl(BIO *b, SSL *ssl);
BIO_set_mode(SSL *ssl, MODE mode);

출처 : http://egloos.zum.com/hermes2/v/701011

공지사항
최근에 올라온 글
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28