OpenSSL Library

ssl

NAME

SSL - OpenSSL SSL/TLS 프로그램 라이브러리

SYNOPSIS

DESCRIPTION

OpenSSL ssl 프로그램 라이브러리는 Secure Sockets Layer (SSL v2/v3)와 Transport Layer Security (TLS v1) 프로토콜을 실장하고 있습니다. 여기에 기술되는 풍부한 API 를 제공합니다.

HEADER FILES

최신의 OpenSSL ssl 프로그램 라이브러리는, 데이터·스트럭쳐와 기능의 prototype를 포함한, 이하의 C 헤더·파일을 제공하고 있습니다:

ssl.h
SSL/TLS API 를 위한 공통 헤더·파일입니다. ssl 프로그램 라이브러리를 이용할 수 있는 API 를 make 하는 프로그램에 포함하게 합니다. 사적인 SSL 헤더와 crypto 프로그램 라이브러리로부터의 헤더의 양쪽 모두를 내부적으로 포함합니다. SSL API 내부의 핵심의 상세를 알 필요가 있다면, 이 헤더 파일 내부를 봐 주세요.
ssl2.h
SSLv2 프로토콜만으로 취급하는 서브·헤더·파일입니다. 이미 ssl.h 에 의해 포함되어 있으므로, 보통은 당신이 포함해서는 안됩니다.
ssl3.h
SSLv3 프로토콜만으로 취급하는 서브·헤더·파일입니다. 이미 ssl.h 에 의해 포함되어 있으므로, 보통은 당신이 포함해서는 안됩니다.
ssl23.h
SSLv2 와 SSLv3 프로토콜의 편성으로 취급하는 서브·헤더·파일입니다. 이미 ssl.h 에 의해 포함되어 있으므로, 보통은 당신이 포함해서는 안됩니다.
tls1.h
TLSv1 프로토콜만으로 취급하는 서브·헤더·파일입니다. 이미 ssl.h 에 의해 포함되어 있으므로, 보통은 당신이 포함해서는 안됩니다.

DATA STRUCTURES

최신의 OpenSSL ssl 프로그램 라이브러리 기능은, 이하의 데이터·스트럭쳐에 대응합니다:

SSL_METHOD (SSL Method)
여러가지 프로토콜의 버젼 (SSLv1, SSLv2, TLSv1)을 실장한 내부적인 ssl 프로그램 라이브러리 방식·기능을 기술하고 있는 디스팟치 구성입니다. SSL_CTX 를 만들 필요가 있습니다.
SSL_CIPHER (SSL Cipher)
이 구성은 SSL/TLS 프로토콜의 핵심 부분이 되어 있는 특정의 cipher 를 위한 알고리즘 정보를 가지고 있습니다. 이용할 수 있는 cipher 는 SSL_CTX 를 기본으로 설정되어 실제로 사용되는 것은 SSL_SESSION 의 부분입니다.
SSL_CTX (SSL Context)
프로그램의 life-time 마다 한 번, 서버와 클라이언트에 의해 만들어져 접속을 위해서(때문에) 다음에 만들어지는 SSL 구성을 위한 디폴트치를 주로 가지는 전체적인 콘텍스트 구성입니다.
SSL_SESSION (SSL Session)
이것은 접속을 위한 최신의 SSL 세션의 상세를 포함한 구성입니다:SSL_CIPHER, 클라이언트와 서버의 증명서, 열쇠, 등.
SSL (SSL Connection)
확립한 접속마다 서버나 클라이언트에 의해 만들어지는 주된 SSL/TLS 구성입니다. 이것은 실제로는 SSL API 에서는 핵심이 되는 구성입니다. run-time 의 어플리케이션은 통상, 거의 다른 모든 구성에 대한 링크를 가진 구성에 대응하고 있습니다.

API FUNCTIONS

최신의 OpenSSL ssl 프로그램 라이브러리는 214 의 API 기능을 export 하고 있습니다. 이하에 기술되고 있습니다:

DEALING WITH PROTOCOL METHODS

여기에서는 SSL_METHOD 구성으로 정의되는 SSL/TLS 프로토콜 방식으로 대응한, 여러가지 API 기능을 기술하고 있습니다.

SSL_METHOD *SSLv2_client_method(void);
전용 클라이언트를 위한 SSLv2 SSL_METHOD 구성에 대한 컨스트릭터.
SSL_METHOD *SSLv2_server_method(void);
전용 서버를 위한 SSLv2 SSL_METHOD 구성에 대한 컨스트릭터.
SSL_METHOD *SSLv2_method(void);
짜 합쳐진 클라이언트와 서버를 위한 SSLv2 SSL_METHOD 구성에 대한 컨스트릭터.
SSL_METHOD *SSLv3_client_method(void);
전용의 클라이언트를 위한 SSLv3 SSL_METHOD 구성에 대한 컨스트릭터.
SSL_METHOD *SSLv3_server_method(void);
전용 서버를 위한 SSLv3 SSL_METHOD 구성에 대한 컨스트릭터.
SSL_METHOD *SSLv3_method(void);
짜 합쳐진 클라이언트와 서버를 위한 SSLv3 SSL_METHOD 구성에 대한 컨스트릭터.
SSL_METHOD *TLSv1_client_method(void);
전용 클라이언트를 위한 TLSv1 SSL_METHOD 구성에 대한 컨스트릭터.
SSL_METHOD *TLSv1_server_method(void);
전용 서버를 위한 TLSv1 SSL_METHOD 구성에 대한 컨스트릭터.
SSL_METHOD *TLSv1_method(void);
짜 합쳐진 클라이언트와 서버를 위한 TLSv1 SSL_METHOD 구성에 대한 컨스트릭터.

DEALING WITH CIPHERS

여기에서는 SSL_CIPHER 구성으로 정의된 SSL/TLS cipher 에 대응한 여러가지 API 의 기능을 기술하고 있습니다.

char *SSL_CIPHER_description(SSL_CIPHER *cipher, char *buf, int len);
사람이 읽을 수 있는 cipher 의 기술을 포함한 buf (len 의 최대 사이즈로)에 캐릭터 라인을 써,buf 를 돌려줍니다.
int SSL_CIPHER_get_bits(SSL_CIPHER *cipher, int *alg_bits);
cipher 로 비트수를 결정합니다. 2 비트에서는 도움이 되지 않는 cipher 를 export 하기 (위해)때문에입니다: 일반적(alg_bits 에 축적되고 있다)으로 알고리즘이 서포트하고 있는 비트와 실제로 사용되는 비트(돌아가 값)
char *SSL_CIPHER_get_name(SSL_CIPHER *cipher);
캐릭터 라인으로서 내부적인 cipher 의 이름을 돌려줍니다. 이것들은 헤더·파일로 SSL2_TXT_xxx,SSL3_TXT_xxx,TLS1_TXT_xxx 에 의해 정의된 여러가지 캐릭터 라인입니다.
char *SSL_CIPHER_get_version(SSL_CIPHER *cipher);
cipher 가 속하는 (즉, 최초의 사양으로 정의된) SSL/TLS 프로토콜의 버젼을 나타내는 ``TLSv1/SSLv3''나 ``SSLv2''와 같은 캐릭터 라인을 돌려줍니다

DEALING WITH PROTOCOL CONTEXTS

여기에서는,SSL_CTX 구성으로 정의된 SSL/TLS 프로토콜의 콘텍스트에 대응한 여러가지 API 기능을 기술하고 있습니다.

int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x);
long SSL_CTX_add_extra_chain_cert(SSL_CTX *ctx, X509 *x509);
int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *c);
int SSL_CTX_check_private_key(SSL_CTX *ctx);
long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, char *parg);
void SSL_CTX_flush_sessions(SSL_CTX *s, long t);
void SSL_CTX_free(SSL_CTX *a);
char *SSL_CTX_get_app_data(SSL_CTX *ctx);
X509_STORE *SSL_CTX_get_cert_store(SSL_CTX *ctx);
STACK *SSL_CTX_get_client_CA_list(SSL_CTX *ctx);
int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL *ssl, X509 **x509, EVP_PKEY **pkey);
char *SSL_CTX_get_ex_data(SSL_CTX *s, int idx);
int SSL_CTX_get_ex_new_index(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))
void (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(SSL *ssl, int cb, int ret);
int SSL_CTX_get_quiet_shutdown(SSL_CTX *ctx);
int SSL_CTX_get_session_cache_mode(SSL_CTX *ctx);
long SSL_CTX_get_timeout(SSL_CTX *ctx);
int (*SSL_CTX_get_verify_callback(SSL_CTX *ctx))(int ok, X509_STORE_CTX *ctx);
int SSL_CTX_get_verify_mode(SSL_CTX *ctx);
int SSL_CTX_load_verify_locations(SSL_CTX *ctx, char *CAfile, char *CApath);
long SSL_CTX_need_tmp_RSA(SSL_CTX *ctx);
SSL_CTX *SSL_CTX_new(SSL_METHOD *meth);
int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *c);
int SSL_CTX_sess_accept(SSL_CTX *ctx);
int SSL_CTX_sess_accept_good(SSL_CTX *ctx);
int SSL_CTX_sess_accept_renegotiate(SSL_CTX *ctx);
int SSL_CTX_sess_cache_full(SSL_CTX *ctx);
int SSL_CTX_sess_cb_hits(SSL_CTX *ctx);
int SSL_CTX_sess_connect(SSL_CTX *ctx);
int SSL_CTX_sess_connect_good(SSL_CTX *ctx);
int SSL_CTX_sess_connect_renegotiate(SSL_CTX *ctx);
int SSL_CTX_sess_get_cache_size(SSL_CTX *ctx);
SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(SSL *ssl, unsigned char *data, int len, int *copy);
int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)(SSL *ssl, SSL_SESSION *sess);
void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)(SSL_CTX *ctx, SSL_SESSION *sess);
int SSL_CTX_sess_hits(SSL_CTX *ctx);
int SSL_CTX_sess_misses(SSL_CTX *ctx);
int SSL_CTX_sess_number(SSL_CTX *ctx);
void SSL_CTX_sess_set_cache_size(SSL_CTX *ctx, t);
void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, SSL_SESSION *(*cb)(SSL *ssl, unsigned char *data, int len, int *copy));
void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, int (*cb)(SSL *ssl, SSL_SESSION *sess));
void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, void (*cb)(SSL_CTX *ctx, SSL_SESSION *sess));
int SSL_CTX_sess_timeouts(SSL_CTX *ctx);
LHASH *SSL_CTX_sessions(SSL_CTX *ctx);
void SSL_CTX_set_app_data(SSL_CTX *ctx, void *arg);
void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *cs);
void SSL_CTX_set_cert_verify_cb(SSL_CTX *ctx, int (*cb)(SSL_CTX *), char *arg)
int SSL_CTX_set_cipher_list(SSL_CTX *ctx, char *str);
void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK *list);
void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey));
void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, int (*cb);(void))
void SSL_CTX_set_default_read_ahead(SSL_CTX *ctx, int m);
int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx);
int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, char *arg);
void SSL_CTX_set_info_callback(SSL_CTX *ctx, void (*cb)(SSL *ssl, int cb, int ret));
void SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op);
void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode);
void SSL_CTX_set_session_cache_mode(SSL_CTX *ctx, int mode);
int SSL_CTX_set_ssl_version(SSL_CTX *ctx, SSL_METHOD *meth);
void SSL_CTX_set_timeout(SSL_CTX *ctx, long t);
long SSL_CTX_set_tmp_dh(SSL_CTX* ctx, DH *dh);
long SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, DH *(*cb)(void));
long SSL_CTX_set_tmp_rsa(SSL_CTX *ctx, RSA *rsa);
long SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx, RSA *(*cb)(void));
void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*cb);(void))
int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);
int SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx, unsigned char *d, long len);
int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, char *file, int type);
int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa);
int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, unsigned char *d, long len);
int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, char *file, int type);
int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);
int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, unsigned char *d);
int SSL_CTX_use_certificate_file(SSL_CTX *ctx, char *file, int type);
 

DEALING WITH SESSIONS

Here we document the various API functions which deal with the SSL/TLS sessions defined in the SSL_SESSION structures.

int SSL_SESSION_cmp(SSL_SESSION *a, SSL_SESSION *b);
void SSL_SESSION_free(SSL_SESSION *ss);
char *SSL_SESSION_get_app_data(SSL_SESSION *s);
char *SSL_SESSION_get_ex_data(SSL_SESSION *s, int idx);
int SSL_SESSION_get_ex_new_index(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))
long SSL_SESSION_get_time(SSL_SESSION *s);
long SSL_SESSION_get_timeout(SSL_SESSION *s);
unsigned long SSL_SESSION_hash(SSL_SESSION *a);
SSL_SESSION *SSL_SESSION_new(void);
int SSL_SESSION_print(BIO *bp, SSL_SESSION *x);
int SSL_SESSION_print_fp(FILE *fp, SSL_SESSION *x);
void SSL_SESSION_set_app_data(SSL_SESSION *s, char *a);
int SSL_SESSION_set_ex_data(SSL_SESSION *s, int idx, char *arg);
long SSL_SESSION_set_time(SSL_SESSION *s, long t);
long SSL_SESSION_set_timeout(SSL_SESSION *s, long t);
 

DEALING WITH CONNECTIONS

Here we document the various API functions which deal with the SSL/TLS connection defined in the SSL structure.

int SSL_accept(SSL *ssl);
int SSL_add_client_CA(SSL *ssl, X509 *x);
char *SSL_alert_desc_string(int value);
char *SSL_alert_desc_string_long(int value);
char *SSL_alert_type_string(int value);
char *SSL_alert_type_string_long(int value);
int SSL_check_private_key(SSL *ssl);
void SSL_clear(SSL *ssl);
long SSL_clear_num_renegotiations(SSL *ssl);
int SSL_connect(SSL *ssl);
void SSL_copy_session_id(SSL *t, SSL *f);
long SSL_ctrl(SSL *ssl, int cmd, long larg, char *parg);
int SSL_do_handshake(SSL *ssl);
SSL *SSL_dup(SSL *ssl);
STACK *SSL_dup_CA_list(STACK *sk);
void SSL_free(SSL *ssl);
SSL_CTX *SSL_get_SSL_CTX(SSL *ssl);
char *SSL_get_app_data(SSL *ssl);
X509 *SSL_get_certificate(SSL *ssl);
SSL_CIPHER *SSL_get_cipher(SSL *ssl);
int SSL_get_cipher_bits(SSL *ssl, int *alg_bits);
char *SSL_get_cipher_list(SSL *ssl, int n);
char *SSL_get_cipher_name(SSL *ssl);
char *SSL_get_cipher_version(SSL *ssl);
STACK *SSL_get_ciphers(SSL *ssl);
STACK *SSL_get_client_CA_list(SSL *ssl);
SSL_CIPHER *SSL_get_current_cipher(SSL *ssl);
long SSL_get_default_timeout(SSL *ssl);
int SSL_get_error(SSL *ssl, int i);
char *SSL_get_ex_data(SSL *ssl, int idx);
int SSL_get_ex_data_X509_STORE_CTX_idx(void);
int SSL_get_ex_new_index(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))
int SSL_get_fd(SSL *ssl);
void (*SSL_get_info_callback(SSL *ssl);)(void)
STACK *SSL_get_peer_cert_chain(SSL *ssl);
X509 *SSL_get_peer_certificate(SSL *ssl);
EVP_PKEY *SSL_get_privatekey(SSL *ssl);
int SSL_get_quiet_shutdown(SSL *ssl);
BIO *SSL_get_rbio(SSL *ssl);
int SSL_get_read_ahead(SSL *ssl);
SSL_SESSION *SSL_get_session(SSL *ssl);
char *SSL_get_shared_ciphers(SSL *ssl, char *buf, int len);
int SSL_get_shutdown(SSL *ssl);
SSL_METHOD *SSL_get_ssl_method(SSL *ssl);
int SSL_get_state(SSL *ssl);
long SSL_get_time(SSL *ssl);
long SSL_get_timeout(SSL *ssl);
int (*SSL_get_verify_callback(SSL *ssl);)(void)
int SSL_get_verify_mode(SSL *ssl);
long SSL_get_verify_result(SSL *ssl);
char *SSL_get_version(SSL *ssl);
BIO *SSL_get_wbio(SSL *ssl);
int SSL_in_accept_init(SSL *ssl);
int SSL_in_before(SSL *ssl);
int SSL_in_connect_init(SSL *ssl);
int SSL_in_init(SSL *ssl);
int SSL_is_init_finished(SSL *ssl);
STACK *SSL_load_client_CA_file(char *file);
void SSL_load_error_strings(void);
SSL *SSL_new(SSL_CTX *ctx);
long SSL_num_renegotiations(SSL *ssl);
int SSL_peek(SSL *ssl, char *buf, int num);
int SSL_pending(SSL *ssl);
int SSL_read(SSL *ssl, char *buf, int num);
int SSL_renegotiate(SSL *ssl);
char *SSL_rstate_string(SSL *ssl);
char *SSL_rstate_string_long(SSL *ssl);
long SSL_session_reused(SSL *ssl);
void SSL_set_accept_state(SSL *ssl);
void SSL_set_app_data(SSL *ssl, char *arg);
void SSL_set_bio(SSL *ssl, BIO *rbio, BIO *wbio);
int SSL_set_cipher_list(SSL *ssl, char *str);
void SSL_set_client_CA_list(SSL *ssl, STACK *list);
void SSL_set_connect_state(SSL *ssl);
int SSL_set_ex_data(SSL *ssl, int idx, char *arg);
int SSL_set_fd(SSL *ssl, int fd);
void SSL_set_info_callback(SSL *ssl, void (*cb);(void))
void SSL_set_options(SSL *ssl, unsigned long op);
void SSL_set_quiet_shutdown(SSL *ssl, int mode);
void SSL_set_read_ahead(SSL *ssl, int yes);
int SSL_set_rfd(SSL *ssl, int fd);
int SSL_set_session(SSL *ssl, SSL_SESSION *session);
void SSL_set_shutdown(SSL *ssl, int mode);
int SSL_set_ssl_method(SSL *ssl, SSL_METHOD *meth);
void SSL_set_time(SSL *ssl, long t);
void SSL_set_timeout(SSL *ssl, long t);
void SSL_set_verify(SSL *ssl, int mode, int (*callback);(void))
void SSL_set_verify_result(SSL *ssl, long arg);
int SSL_set_wfd(SSL *ssl, int fd);
int SSL_shutdown(SSL *ssl);
int SSL_state(SSL *ssl);
char *SSL_state_string(SSL *ssl);
char *SSL_state_string_long(SSL *ssl);
long SSL_total_renegotiations(SSL *ssl);
int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey);
int SSL_use_PrivateKey_ASN1(int type, SSL *ssl, unsigned char *d, long len);
int SSL_use_PrivateKey_file(SSL *ssl, char *file, int type);
int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa);
int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len);
int SSL_use_RSAPrivateKey_file(SSL *ssl, char *file, int type);
int SSL_use_certificate(SSL *ssl, X509 *x);
int SSL_use_certificate_ASN1(SSL *ssl, int len, unsigned char *d);
int SSL_use_certificate_file(SSL *ssl, char *file, int type);
int SSL_version(SSL *ssl);
int SSL_want(SSL *ssl);
int SSL_want_nothing(SSL *ssl);
int SSL_want_read(SSL *ssl);
int SSL_want_write(SSL *ssl);
int SSL_want_x509_lookup(s);
int SSL_write(SSL *ssl, char *buf, int num); 
위로 스크롤