OpenSSL    
 Index |  openssl(3) |  ssl(3) |  crypto(3) 
 
Title
About
News
Documents
Source
Contribution
Support
Related

 
[an error occurred while processing this directive]

ssl(3)

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 ライブラリは、データ・ストラクチャと機能のプロトタイプを含む、以下の 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 機能をエキスポートしています。 以下に記述されています:

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 をエクスポートするためです: 一般的(alg_bits に蓄積されている)にアルゴリズムがサポートしているビットと、実際に使われるビット(返り値)

char *SSL_CIPHER_get_name(SSL_CIPHER *cipher);
文字列として内部的な cipher の名前を返します。 これらはヘッダ・ファイルで SSL2_TXT_xxxSSL3_TXT_xxxTLS1_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);
 

SEE ALSO

openssl(1), crypto(3)

HISTORY

ssl(3) ドキュメントは OpenSSL 0.9.2 のものです。


OpenSSL ホームページ