X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=doc%2Fssl%2Fssl.pod;h=242087e691e35a102174de7d376b1f132fa59ed2;hb=8aa556e1c3b49274ccae579cb584eb5b702a3b0e;hp=5f9ec8d9510d4ba95caca4d032abdaddc30a2e31;hpb=bb075f883356589425b7e57f788c7498a83b0219;p=openssl.git diff --git a/doc/ssl/ssl.pod b/doc/ssl/ssl.pod index 5f9ec8d951..242087e691 100644 --- a/doc/ssl/ssl.pod +++ b/doc/ssl/ssl.pod @@ -13,6 +13,69 @@ The OpenSSL B library implements the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols. It provides a rich API which is documented here. +At first the library must be initialized; see +L. + +Then an B object is created as a framework to establish +TLS/SSL enabled connections (see L). +Various options regarding certificates, algorithms etc. can be set +in this object. + +When a network connection has been created, it can be assigned to an +B object. After the B object has been created using +L, L or +L can be used to associate the network +connection with the object. + +Then the TLS/SSL handshake is performed using +L or L +respectively. +L and L are used +to read and write data on the TLS/SSL connection. +L can be used to shut down the +TLS/SSL connection. + +=head1 DATA STRUCTURES + +Currently the OpenSSL B library functions deals with the following data +structures: + +=over 4 + +=item B (SSL Method) + +That's a dispatch structure describing the internal B library +methods/functions which implement the various protocol versions (SSLv1, SSLv2 +and TLSv1). It's needed to create an B. + +=item B (SSL Cipher) + +This structure holds the algorithm information for a particular cipher which +are a core part of the SSL/TLS protocol. The available ciphers are configured +on a B basis and the actually used ones are then part of the +B. + +=item B (SSL Context) + +That's the global context structure which is created by a server or client +once per program life-time and which holds mainly default values for the +B structures which are later created for the connections. + +=item B (SSL Session) + +This is a structure containing the current TLS/SSL session details for a +connection: Bs, client and server certificates, keys, etc. + +=item B (SSL Connection) + +That's the main SSL/TLS structure which is created by a server or client per +established connection. This actually is the core structure in the SSL API. +Under run-time the application usually deals with this structure which has +links to mostly all other structures. + +=back + + =head1 HEADER FILES Currently the OpenSSL B library provides the following C header files @@ -55,46 +118,6 @@ it's already included by ssl.h>. =back -=head1 DATA STRUCTURES - -Currently the OpenSSL B library functions deals with the following data -structures: - -=over 4 - -=item B (SSL Method) - -That's a dispatch structure describing the internal B library -methods/functions which implement the various protocol versions (SSLv1, SSLv2 -and TLSv1). It's needed to create an B. - -=item B (SSL Cipher) - -This structure holds the algorithm information for a particular cipher which -are a core part of the SSL/TLS protocol. The available ciphers are configured -on a B basis and the actually used ones are then part of the -B. - -=item B (SSL Context) - -That's the global context structure which is created by a server or client -once per program life-time and which holds mainly default values for the -B structures which are later created for the connections. - -=item B (SSL Session) - -This is a structure containing the current SSL session details for a -connection: Bs, client and server certificates, keys, etc. - -=item B (SSL Connection) - -That's the main SSL/TLS structure which is created by a server or client per -established connection. This actually is the core structure in the SSL API. -Under run-time the application usually deals with this structure which has -links to mostly all other structures. - -=back - =head1 API FUNCTIONS Currently the OpenSSL B library exports 214 API functions. @@ -107,39 +130,39 @@ protocol methods defined in B structures. =over 4 -=item SSL_METHOD *B(void); +=item const SSL_METHOD *B(void); Constructor for the SSLv2 SSL_METHOD structure for a dedicated client. -=item SSL_METHOD *B(void); +=item const SSL_METHOD *B(void); Constructor for the SSLv2 SSL_METHOD structure for a dedicated server. -=item SSL_METHOD *B(void); +=item const SSL_METHOD *B(void); Constructor for the SSLv2 SSL_METHOD structure for combined client and server. -=item SSL_METHOD *B(void); +=item const SSL_METHOD *B(void); Constructor for the SSLv3 SSL_METHOD structure for a dedicated client. -=item SSL_METHOD *B(void); +=item const SSL_METHOD *B(void); Constructor for the SSLv3 SSL_METHOD structure for a dedicated server. -=item SSL_METHOD *B(void); +=item const SSL_METHOD *B(void); Constructor for the SSLv3 SSL_METHOD structure for combined client and server. -=item SSL_METHOD *B(void); +=item const SSL_METHOD *B(void); Constructor for the TLSv1 SSL_METHOD structure for a dedicated client. -=item SSL_METHOD *B(void); +=item const SSL_METHOD *B(void); Constructor for the TLSv1 SSL_METHOD structure for a dedicated server. -=item SSL_METHOD *B(void); +=item const SSL_METHOD *B(void); Constructor for the TLSv1 SSL_METHOD structure for combined client and server. @@ -163,7 +186,7 @@ Determine the number of bits in I. Because of export crippled ciphers there are two bits: The bits the algorithm supports in general (stored to I) and the bits which are actually used (the return value). -=item char *B(SSL_CIPHER *cipher); +=item const char *B(SSL_CIPHER *cipher); Return the internal name of I as a string. These are the various strings defined by the I, I and I @@ -190,7 +213,7 @@ protocol context defined in the B structure. =item int B(SSL_CTX *ctx, SSL_SESSION *c); -=item int B(SSL_CTX *ctx); +=item int B(const SSL_CTX *ctx); =item long B(SSL_CTX *ctx, int cmd, long larg, char *parg); @@ -202,23 +225,27 @@ protocol context defined in the B structure. =item X509_STORE *B(SSL_CTX *ctx); -=item STACK *B(SSL_CTX *ctx); +=item STACK *B(const SSL_CTX *ctx); =item int (*B(SSL_CTX *ctx))(SSL *ssl, X509 **x509, EVP_PKEY **pkey); -=item char *B(SSL_CTX *s, int idx); +=item void B(SSL_CTX *ctx); + +=item char *B(const SSL_CTX *s, int idx); =item int B(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void)) =item void (*B(SSL_CTX *ctx))(SSL *ssl, int cb, int ret); -=item int B(SSL_CTX *ctx); +=item int B(const SSL_CTX *ctx); + +=item void B(SSL_CTX *ctx); =item int B(SSL_CTX *ctx); -=item long B(SSL_CTX *ctx); +=item long B(const SSL_CTX *ctx); -=item int (*B(SSL_CTX *ctx))(int ok, X509_STORE_CTX *ctx); +=item int (*B(const SSL_CTX *ctx))(int ok, X509_STORE_CTX *ctx); =item int B(SSL_CTX *ctx); @@ -226,7 +253,7 @@ protocol context defined in the B structure. =item long B(SSL_CTX *ctx); -=item SSL_CTX *B(SSL_METHOD *meth); +=item SSL_CTX *B(const SSL_METHOD *meth); =item int B(SSL_CTX *ctx, SSL_SESSION *c); @@ -276,7 +303,7 @@ protocol context defined in the B structure. =item void B(SSL_CTX *ctx, X509_STORE *cs); -=item void B(SSL_CTX *ctx, int (*cb)(SSL_CTX *), char *arg) +=item void B(SSL_CTX *ctx, int (*cb)(), char *arg) =item int B(SSL_CTX *ctx, char *str); @@ -294,13 +321,19 @@ protocol context defined in the B structure. =item void B(SSL_CTX *ctx, void (*cb)(SSL *ssl, int cb, int ret)); +=item void B(SSL_CTX *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)); + +=item void B(SSL_CTX *ctx, void *arg); + =item void B(SSL_CTX *ctx, unsigned long op); =item void B(SSL_CTX *ctx, int mode); +=item void B(SSL_CTX *ctx, int m); + =item void B(SSL_CTX *ctx, int mode); -=item int B(SSL_CTX *ctx, SSL_METHOD *meth); +=item int B(SSL_CTX *ctx, const SSL_METHOD *meth); =item void B(SSL_CTX *ctx, long t); @@ -324,7 +357,7 @@ appropriate size (using ???) and return it. long B(SSL *ssl, RSA *(*cb)(SSL *ssl, int export, int keylength)); -The same as L<"SSL_CTX_set_tmp_rsa_callback">, except it operates on an SSL +The same as B, except it operates on an SSL session instead of a context. =item void B(SSL_CTX *ctx, int mode, int (*cb);(void)) @@ -347,6 +380,19 @@ session instead of a context. =item int B(SSL_CTX *ctx, char *file, int type); +=item X509 *B(const SSL_CTX *ctx); + +=item EVP_PKEY *B(const SSL_CTX *ctx); + +=item void B(SSL_CTX *ctx, unsigned int (*callback)(SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len)); + +=item int B(SSL_CTX *ctx, const char *hint); + +=item void B(SSL_CTX *ctx, unsigned int (*callback)(SSL *ssl, const char *identity, unsigned char *psk, int max_psk_len)); + + + + =back =head2 DEALING WITH SESSIONS @@ -356,27 +402,27 @@ sessions defined in the B structures. =over 4 -=item int B(SSL_SESSION *a, SSL_SESSION *b); +=item int B(const SSL_SESSION *a, const SSL_SESSION *b); =item void B(SSL_SESSION *ss); =item char *B(SSL_SESSION *s); -=item char *B(SSL_SESSION *s, int idx); +=item char *B(const SSL_SESSION *s, int idx); =item int B(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void)) -=item long B(SSL_SESSION *s); +=item long B(const SSL_SESSION *s); -=item long B(SSL_SESSION *s); +=item long B(const SSL_SESSION *s); -=item unsigned long B(SSL_SESSION *a); +=item unsigned long B(const SSL_SESSION *a); =item SSL_SESSION *B(void); -=item int B(BIO *bp, SSL_SESSION *x); +=item int B(BIO *bp, const SSL_SESSION *x); -=item int B(FILE *fp, SSL_SESSION *x); +=item int B(FILE *fp, const SSL_SESSION *x); =item void B(SSL_SESSION *s, char *a); @@ -411,7 +457,7 @@ connection defined in the B structure. =item char *B(int value); -=item int B(SSL *ssl); +=item int B(const SSL *ssl); =item void B(SSL *ssl); @@ -419,7 +465,7 @@ connection defined in the B structure. =item int B(SSL *ssl); -=item void B(SSL *t, SSL *f); +=item void B(SSL *t, const SSL *f); =item long B(SSL *ssl, int cmd, long larg, char *parg); @@ -431,77 +477,77 @@ connection defined in the B structure. =item void B(SSL *ssl); -=item SSL_CTX *B(SSL *ssl); +=item SSL_CTX *B(const SSL *ssl); =item char *B(SSL *ssl); -=item X509 *B(SSL *ssl); +=item X509 *B(const SSL *ssl); -=item SSL_CIPHER *B(SSL *ssl); +=item const char *B(const SSL *ssl); -=item int B(SSL *ssl, int *alg_bits); +=item int B(const SSL *ssl, int *alg_bits); -=item char *B(SSL *ssl, int n); +=item char *B(const SSL *ssl, int n); -=item char *B(SSL *ssl); +=item char *B(const SSL *ssl); -=item char *B(SSL *ssl); +=item char *B(const SSL *ssl); -=item STACK *B(SSL *ssl); +=item STACK *B(const SSL *ssl); -=item STACK *B(SSL *ssl); +=item STACK *B(const SSL *ssl); =item SSL_CIPHER *B(SSL *ssl); -=item long B(SSL *ssl); +=item long B(const SSL *ssl); -=item int B(SSL *ssl, int i); +=item int B(const SSL *ssl, int i); -=item char *B(SSL *ssl, int idx); +=item char *B(const SSL *ssl, int idx); =item int B(void); =item int B(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void)) -=item int B(SSL *ssl); +=item int B(const SSL *ssl); -=item void (*B(SSL *ssl);)(void) +=item void (*B(const SSL *ssl);)() -=item STACK *B(SSL *ssl); +=item STACK *B(const SSL *ssl); -=item X509 *B(SSL *ssl); +=item X509 *B(const SSL *ssl); -=item EVP_PKEY *B(SSL *ssl); +=item EVP_PKEY *B(const SSL *ssl); -=item int B(SSL *ssl); +=item int B(const SSL *ssl); -=item BIO *B(SSL *ssl); +=item BIO *B(const SSL *ssl); -=item int B(SSL *ssl); +=item int B(const SSL *ssl); -=item SSL_SESSION *B(SSL *ssl); +=item SSL_SESSION *B(const SSL *ssl); -=item char *B(SSL *ssl, char *buf, int len); +=item char *B(const SSL *ssl, char *buf, int len); -=item int B(SSL *ssl); +=item int B(const SSL *ssl); -=item SSL_METHOD *B(SSL *ssl); +=item const SSL_METHOD *B(SSL *ssl); -=item int B(SSL *ssl); +=item int B(const SSL *ssl); -=item long B(SSL *ssl); +=item long B(const SSL *ssl); -=item long B(SSL *ssl); +=item long B(const SSL *ssl); -=item int (*B(SSL *ssl);)(void) +=item int (*B(const SSL *ssl))(int,X509_STORE_CTX *) -=item int B(SSL *ssl); +=item int B(const SSL *ssl); -=item long B(SSL *ssl); +=item long B(const SSL *ssl); -=item char *B(SSL *ssl); +=item char *B(const SSL *ssl); -=item BIO *B(SSL *ssl); +=item BIO *B(const SSL *ssl); =item int B(SSL *ssl); @@ -521,11 +567,11 @@ connection defined in the B structure. =item long B(SSL *ssl); -=item int B(SSL *ssl, char *buf, int num); +=item int B(SSL *ssl, void *buf, int num); -=item int B(SSL *ssl); +=item int B(const SSL *ssl); -=item int B(SSL *ssl, char *buf, int num); +=item int B(SSL *ssl, void *buf, int num); =item int B(SSL *ssl); @@ -553,6 +599,10 @@ connection defined in the B structure. =item void B(SSL *ssl, void (*cb);(void)) +=item void B(SSL *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)); + +=item void B(SSL *ctx, void *arg); + =item void B(SSL *ssl, unsigned long op); =item void B(SSL *ssl, int mode); @@ -565,7 +615,7 @@ connection defined in the B structure. =item void B(SSL *ssl, int mode); -=item int B(SSL *ssl, SSL_METHOD *meth); +=item int B(SSL *ssl, const SSL_METHOD *meth); =item void B(SSL *ssl, long t); @@ -579,11 +629,11 @@ connection defined in the B structure. =item int B(SSL *ssl); -=item int B(SSL *ssl); +=item int B(const SSL *ssl); -=item char *B(SSL *ssl); +=item char *B(const SSL *ssl); -=item char *B(SSL *ssl); +=item char *B(const SSL *ssl); =item long B(SSL *ssl); @@ -605,25 +655,111 @@ connection defined in the B structure. =item int B(SSL *ssl, char *file, int type); -=item int B(SSL *ssl); +=item int B(const SSL *ssl); + +=item int B(const SSL *ssl); + +=item int B(const SSL *ssl); + +=item int B(const SSL *ssl); + +=item int B(const SSL *ssl); + +=item int B(const SSL *ssl); -=item int B(SSL *ssl); +=item int B(SSL *ssl, const void *buf, int num); -=item int B(SSL *ssl); +=item void B(SSL *ssl, unsigned int (*callback)(SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len)); -=item int B(SSL *ssl); +=item int B(SSL *ssl, const char *hint); -=item int B(SSL *ssl); +=item void B(SSL *ssl, unsigned int (*callback)(SSL *ssl, const char *identity, unsigned char *psk, int max_psk_len)); -=item int B(s); +=item const char *B(SSL *ssl); -=item int B(SSL *ssl, char *buf, int num); +=item const char *B(SSL *ssl); =back =head1 SEE ALSO -L, L +L, L, +L, L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L =head1 HISTORY