Răsfoiți Sursa

tls: removed deprecated readme file [skip ci]

Daniel-Constantin Mierla 4 ani în urmă
părinte
comite
df50e1e4ea
1 a modificat fișierele cu 0 adăugiri și 414 ștergeri
  1. 0 414
      src/modules/tls/README.TLS

+ 0 - 414
src/modules/tls/README.TLS

@@ -1,414 +0,0 @@
-[NOTE: this file is obsolete, use README instead]
-
-
-free-TLS core module
-
-Created By: Peter Griffiths
-Mantainer: Cesc Santasusana
-
-Edited by
-
-Cesc Santasusana
-
-Copyright © 2005 Cesc Santasusana
-     _________________________________________________________
-
-   TABLE OF CONTENTS
-1. CHAPTER 1. USER'S GUIDE	2
-	1.1. OVERVIEW	2
-	1.2. DEPENDENCIES	2
-		1.2.1. SER Core and patches	2
-		1.2.2. SER Modules	2
-		1.2.3. External Libraries or Applications	2
-	1.3. HOW TO INSTALL	3
-		1.3.1. File Structure
-		1.3.2. Patches
-		1.3.3. Test Configuration in tls/etc
-		1.3.4. Tools to create certificates in tls/tools
-	1.4. HOW TO COMPILE	3
-	1.5. CONFIG FILE PARAMETERS	3
-		1.5.1. disable_tls	4
-		1.5.2. listen	4
-		1.5.3. tls_certificate	4
-		1.5.4. tls_private_key	4
-		1.5.5. tls_ca_list	4
-		1.5.6. tls_ciphers_list	4
-		1.5.7. tls_method	4
-		1.5.8. tls_verify and tls_require_certificate	4
-		1.5.9. tls_handshake_timeout and tls_send_timeout	5
-		1.5.10. tls_domain[IP_2:port2]	5
-	1.6. SSL/TLS AUTHENTICATION: CLIENT AND SERVER	5
-	1.7. EXPORTED FUNCTIONS	6
-2. CHAPTER 2. DEVELOPER'S GUIDE	6
-	2.1. TLS_CONFIG	6
-	2.2. TLS_INIT	6
-		2.2.1. default ssl context	6
-		2.2.2. init_tls(void)	6
-		2.2.3. destroy_tls(void)	6
-		2.2.4. tls_init(struct socket_info *)	7
-		2.2.5. ser_malloc, ser_realloc, ser_free	7
-	2.3. TLS_SERVER	7
-		2.3.1. SSL data per connection	7
-		2.3.2. tls_print_errstack(void)	7
-		2.3.3. tls_tcpconn_init( struct tcp_connection *, int)	7
-		2.3.4. tls_tcpconn_clean( struct tcp_connection *)	7
-		2.3.5. tls_close( struct tcp_connection *, int )	7
-		2.3.6. tls_blocking_write( struct tcp_connection, int, const char, size_t )	7
-		2.3.7. tls_read( struct tcp_connection *)	8
-		2.3.8. tls_fix_read_conn( struct tcp_connection )	8
-	2.4. TLS_DOMAIN	8
-		2.4.1. tls_domains	8
-		2.4.2. tls_find_domain( struct ip_addr *, unsigned short)	8
-		2.4.3. tls_new_domain( struct ip_addr *, unsigned *)	8
-		2.4.4. tls_free_domains(void)	8
-3. CHAPTER 3. FREQUENTLY ASKED QUESTIONS	8
-	3.1. WHERE CAN I FIND MORE ABOUT SER?	8
-	3.2. WHERE CAN I POST A QUESTION ABOUT THIS MODULE?	8
-	3.3. HOW CAN I REPORT A BUG?	9
-	3.4. WHAT IS THE DIFFERENCE WITH OpenSER-TLS?
-	3.5. I AM NOT HAPPY WITH THIS README ... NOW WHAT?
-
-     _________________________________________________________
-
-1. CHAPTER 1. USER'S GUIDE
-	1.1. OVERVIEW
-	TLS is an optional part of the core, not a module.
-	TLS, as defined in SIP RFC, is a mandatory feature for proxies and can be used to secure the SIP signalling 
-	on a hop-by-hop basis (not end-to-end). TLS works on top of TCP (DTLS, or TLS over UDP is already 
-	defined by IETF and may become available in the future).
-     _________________________________________________________
-
-1.2. DEPENDENCIES
-	1.2.1. SER Core and patches
-	Core must be compiled with TCP support and the patched cfg.y and cfg.lex, and some 
-	modification in Makefile.defs. 
-	The Makefile.defs file is where the library and include paths are set (where to locate Openssl) 
-	Read more on this below on the "external libraries" dependencies.
-	The cfg.XXX patch provide configuration features from the ser.cfg file, useful and necessary.
-	This core module has been compiled successfully with ser branch rel_0_9_0 (updated
-		as of June 2005, ser-0.9.3). It should compile in HEAD too without problem.
-	It has been tested for functionality (successfully) with rel_0_9_0 (ser-0.9.0).
-	Report on success/failure stories to the mantainer. Tks!
-		 _________________________________________________________
-
-	1.2.2. SER Modules
-		No dependencies on SER modules
-		 _________________________________________________________
-	
-	1.2.3. External Libraries or Applications
-	The following libraries or applications must be installed before running SER with this module loaded:
-	* OpenSSL v0.9.7 or higher (OpenSSL v0.9.6 also compiles, though not recommended).
-	Out of OpenSSL, you need:
-	* libssl
-	* libcrypto
-	* openssl/*.h
-	Locate this, usually in:
-	/usr/local/lib (for libraries)
-	/usr/local/ssl/include/openssl (for header files)
-	Depending on your distro, these paths may vary. In this case, you need to modify Makefile.defs file in 
-	$SERROOT. At the bottom of the file, look for
-		ifneq ($(TLS),)
-		  LIBS+= -L$SOMEPATH/lib -lssl  -lcrypto
-		  DEFS+= -I$SOMEPATH/ssl/include
-		endif
-	Change the LIBS entry to include the folder where the libssl and libcrypto files are. 
-	Change the DEFS entry to include the folder where the openssl/ folder is.
-	NOTE: RedHat ships by default with a very strange setup of the paths, as well as not usual compilation of 
-	the libraries, which resumes in ... trouble. Look for solutions in Google, or locally compile OpenSSL 
-	sources on your system.
-	________________________________________________________
-1.3. HOW TO INSTALL
-	1.3.1. File Structure
-	This is the file structure that needs to be created:
-	$SER_ROOT/tls/tls_config.h and .c
-	$SER_ROOT/tls/tls_init.h and .c
-	$SER_ROOT/tls/tls_server.h and .c
-	$SER_ROOT/tls/tls_domain.h and .c
-	
-	The files that (may) need to be patched or modified
-	$SER_ROOT/Makefile.defs
-	$SER_ROOT/cfg.y
-	$SER_ROOT/cfg.lex
-	NOTE: patches can be found in the tls/patches. See above for Makefile.defs tweaking to locate OpenSSL.
-	
-	1.3.2. Patches
-	In the experimental/tls/patches folder, there are the following files:
-	- cfg.lex.patch and cfg.y.patch, to be used to patch the corresponding
-		files in $SERROOT.
-		> cp cfg.XXX.patch $SERROOT/
-		> cd $SERROOT
-		> patch -p0 < cfg.XXX.patch
-	- cfg.y and cfg.lex: these are the full files, taken from the cvs rel_0_9_0 and patched
-		with the above patches (for lazy people :D ). 
-	Use the patches if you have modified your cfg.y or cfg.lex files or if it is a different
-		branch. Use the full files if you don't want to patch the files, or have the standard
-		cvs rel_0_9_0 branch files.
-	
-	1.3.3. Test configuration
-	In the folder tls/etc you can find a sample config file, along with test certificates ready to use.
-	Note that in the tls/etc/tls.ser.cfg, the path to certificates and private keys are set to
-	          /usr/local/etc/ser/certs and /usr/local/etc/ser/private
-		  (change according to your local configuration)
-	
-	1.3.4. Tools to create certificates
-	In the folder tls/tools there are script and configuration files to be used with openssl application
-	to create certificate (root CA and user certs).
-	Read the README.tls.tools file there for more info.
-	________________________________________________________
-
-1.4. HOW TO COMPILE
-	Easy ;)  Add the TLS=1 flag when compiling, for example:
-	>	make TLS=1 install
-	If you have problems compiling the TLS code, such as header files not found, or linking problems related 
-	to SSL_* functions, check the paths in Makefile.defs (at the bottom, the DEFS+= and LIB+=, and check if 
-	the openssl/ folder is there, and if the libssl.so and libcrypto.so files are in the specified folders).
-	________________________________________________________
-	
-1.5. CONFIG FILE PARAMETERS
-	All these parameters can be used from the ser.cfg file, to configure the behavior of SER-tls.
-	________________________________________________________
-	1.5.1. disable_tls
-	Disables TLS (no server is created on the listen addresses, no outgoing connections can be set up).
-	It only exhists if TLS=1 is used at compile time.
-			Default_value: disable_tls=0
-	________________________________________________________
-	1.5.2. listen
-	Not specific to TLS. Allows to specify the protocol (udp, tcp, tls), the IP address and the port 
-	where the listening server will be.
-			listen=tls:IP:port
-	________________________________________________________
-	1.5.3. tls_certificate
-	NOTE: To be able to use most of this configuration parameters, you need to have patched cfg.y and cfg.lex 
-	(and recompile :D )
-		Public certificate file for SER. It will be used as server-side certificate for incoming TLS 
-	connections,  and as a client-side certificate for outgoing TLS connections.
-		default: "CFG_DIR/cert.pem"
-			example: tls_certificate="/mycerts/certs/ser_server_cert.pem"
-	________________________________________________________
-	1.5.4. tls_private_key
-		Private key of the above certificate ... keep it in a safe place with tight permissions!
-		default: CFG_DIR/cert.pem
-			example: tls_private_key="/mycerts/private/prik.pem"
-	________________________________________________________
-	1.5.5. tls_ca_list
-		List of trusted CAs. The file contains the certificates accepted, one after the other ( cat x >> 
-	ca.list). It MUST be a file, not a folder (for now).
-		default: "" (no ca_list)
-			example: tls_ca_list="/mycerts/certs/ca_list.pem"
-	________________________________________________________
-	1.5.6. tls_ciphers_list
-		We can specify the list of algorithms for authentication and encryption that we allow.
-		To obtain a list of ciphers and then choose, use the openssl application:
-		> openssl ciphers 'ALL:eNULL:!LOW:!EXPORT'
-		Do not use the NULL algorithms ... only for testing!!!
-		Default: no change, use the default ciphers choosen by OpenSSL.
-			Example: tls_ciphers_list="NULL-SHA:NULL-MD5:AES256-SHA:AES128-SHA"
-	________________________________________________________
-	1.5.7. tls_method
-		Protocol version to use. Best is to use sslv23, for extended compatibility. Using any of the other 
-	will restrict the version to just that one version. In fact, sslv2 is disabled in the source code... to use it, you 
-	need to edit tls_init.c
-		Default: sslv23
-			tls_method= [sslv2 | sslv23 | sslv3 | tlsv1]  
-	________________________________________________________
-	1.5.8. tls_verify and tls_require_certificate
-	This two variables highly effect the final security of your deployment. READ carefully!
-		Technically, tls_verify activates SSL_VERIFY_PEER in the ssl_context.
-		tls_require_certificate does the same with SSL_VERIFY_FAIL_IF_NO_PEER_CERT, which is 
-	only possible if SSL_VERIFY_PEER is also turned on.
-		See the "how does verification work" for more info
-		default is 0 for both.
-			Example: tls_verify = 1
-							tls_require_certificate = 1
-			(this example turns on the strictest and strongest authentication possible)
-	________________________________________________________
-	1.5.9. tls_handshake_timeout and tls_send_timeout
-		Timeouts ... advanced users only.
-		default is 120 seconds for both.
-			Example: tls_handshake_timeout=119    [number of seconds]
-			Example: tls_send_timeout=121              [number of seconds]
-	________________________________________________________
-	1.5.10. tls_domain[IP_2:port2]
-	Note: domains are only possible if cfg.y and cfg.lex are patched.
-			If you only run one domain, the main one is enough. If you are running several tls servers (that is, 
-	you have more than one listen:tls:ip:port entry in the config file), you can specify some parameters for each 
-	of them separately (not all the above). 
-			tls_domain[IP_2:port2] {
-			#specify parameters for a domain in particular, otherwise, 
-			#it will use the default. These are the possible parameters to
-			#change for each domain
-			tls_certificate="new_cert"
-			tls_private_key="new_cert_key"
-			tls_ca_list="other ca"
-			tls_method="tlsv1"
-			}
-			tls_domain[IP_3:port3] {
-		...
-			}
-			NOTE: For now, tls_ciphers_list cannot be specified on a per domain basis. When I have the time 
-	to thoroughly test tls_domains, I will add this.
-     _________________________________________________________
-
-1.6. SSL/TLS AUTHENTICATION: CLIENT AND SERVER
-	TLS provides for strong authentication mechanism, as well as encryption following authentication. Of 
-	course, null encryption can be used, as well as weak authentication mechanisms (for example, anonymous, 
-	that is, no authentication).
-	How does verification work?
-	Verification is the process by which the authentication data provided by the peers is checked. This data 
-	consists usually of a peer certificate, plus a chain of trusted certification authorities. If for whatever reason, 
-	either of the peers thinks that the handshake is not valid, the ssl connection is not established.
-	The reasons could be many: untrusted server certficate, too-weak algorithm, invalid client cert, no client 
-	authentication, ...
-	The "tls_verify" and "tls_require_certificate" are SER-names for the 
-	OpenSSL defined flags:
-	- SSL_VERIFY_PEER is tls_verify) and 
-	- SSL_VERIFY_FAIL_IF_NO_PEER_CERT is tls_require_certificate (tls_require_certificate is only used 
-	if tls_verify=1)
-	
-	If we are acting as a server, we always send our server-side certificate to the client. 
-	- If tls_verify=0, we do not request the client a client-certificate. This means that the client is not 
-		authenticated.
-	- If tls_verify=1, we (the server) send a client-certificate request to the client. But the client is free 
-		to not provide any. In this case,  tls_require_certificate comes into play:
-			_ if tls_require_cert=0, the verification process will succedd if
-				the client does not provide a certificate, or if it provides
-				one, it verifies correctly against the server's list of 
-				trusted certification authorities.
-			_ if tls_require_cert=1, the verification process will only succeed
-				if the client provides a certificate and this verifies correctly
-				against the server's list of trusted CAs.
-     _________________________________________________________
-
-1.7. EXPORTED FUNCTIONS
-	Functions are accessible by including the appropriate tls/tls_xxx.h file.
-
-     _________________________________________________________
-
-2. CHAPTER 2. DEVELOPER'S GUIDE
-	________________________________________________________
-2.1. TLS_CONFIG
-	It contains configuration variables for ser's tls (timeouts, file paths, etc).
-	________________________________________________________
-2.2. TLS_INIT
-	Initialization related functions and parameters.
-	________________________________________________________
-	2.2.1. default ssl context
-		extern SSL_CTX *default_ctx;
-		It is the common context for all tls sockets. If domains are used, each has its own.
-		________________________________________________________
-	2.2.2. init_tls(void)
-		Called once to initialize the tls subsystem, from the main().
-		int init_tls(void);
-		________________________________________________________
-	2.2.3. destroy_tls(void)
-		Called once, just before cleanup.
-		void destroy_tls(void);
-		________________________________________________________
-	2.2.4. tls_init(struct socket_info *)
-		Called once for each tls socket created.
-		int tls_init(struct socket_info *si);
-		________________________________________________________
-	2.2.5. ser_malloc, ser_realloc, ser_free
-		Wrapper functions around the shm_* functions. OpenSSL uses non-shared memory to create its objects, 
-		thus it would not work in SER. By creating these wrappers and configuring OpenSSL to use them instead 
-		of its default memory functions, we have all OpenSSL objects in shared memory, ready to use.
-		________________________________________________________
-2.3. TLS_SERVER
-	________________________________________________________
-	2.3.1. SSL data per connection
-		Each TLS connection, incoming or outgoing, creates an SSL * object, where configuration inherited from 
-		the SSL_CTX * and particular info on that socket are stored. This SSL * structure is kept in SER as long as 
-		the connection is alive, as part of the struct tcp_connection * object:
-		struct tcp_connection *c;
-		SSL *ssl;
-		//create somehow SSL object
-		c->extra_data = (void *) ssl; 
-		ssl = (SSL *) c->extra_data;
-		________________________________________________________
-	2.3.2. tls_print_errstack(void)
-		/*
-		 * dump ssl error stack 
-		 */
-		void            tls_print_errstack(void);
-		________________________________________________________
-	2.3.3. tls_tcpconn_init( struct tcp_connection *, int)
-		/*
-		 * Called when new tcp connection is accepted 
-		 */
-		int             tls_tcpconn_init(struct tcp_connection *c, int sock);
-		________________________________________________________
-	2.3.4. tls_tcpconn_clean( struct tcp_connection *)
-		/*
-		 * clean the extra data upon connection shut down 
-		 */
-		void            tls_tcpconn_clean(struct tcp_connection *c);
-		________________________________________________________
-	2.3.5. tls_close( struct tcp_connection *, int )
-		/*
-		 * shut down the TLS connection 
-		 */
-		void            tls_close(struct tcp_connection *c, int fd);
-		________________________________________________________
-	2.3.6. tls_blocking_write( struct tcp_connection, int, const char, size_t )
-		size_t          tls_blocking_write(struct tcp_connection *c, int fd,
-						   const char *buf, size_t len);
-		________________________________________________________
-	2.3.7. tls_read( struct tcp_connection *)
-		size_t          tls_read(struct tcp_connection *c);
-		________________________________________________________
-	2.3.8. tls_fix_read_conn( struct tcp_connection )
-		int             tls_fix_read_conn(struct tcp_connection *c);
-		________________________________________________________
-2.4. TLS_DOMAIN
-	________________________________________________________
-	2.4.1. tls_domains
-		extern struct tls_domain *tls_domains;
-	
-		________________________________________________________
-	2.4.2. tls_find_domain( struct ip_addr *, unsigned short)
-		/*
-		 * find domain with given ip and port 
-		 */
-		struct tls_domain *tls_find_domain(struct ip_addr *ip,
-						   unsigned short port);
-		________________________________________________________
-	2.4.3. tls_new_domain( struct ip_addr *, unsigned *)
-		/*
-		 * create a new domain 
-		 */
-		int             tls_new_domain(struct ip_addr *ip, unsigned short port);
-	
-		________________________________________________________
-	2.4.4. tls_free_domains(void)
-		/*
-		 * clean up 
-		 */
-		void            tls_free_domains(void);
-	
-	________________________________________________________
-CHAPTER 3. FREQUENTLY ASKED QUESTIONS
-
-		________________________________________________________
-	3.1.    WHERE CAN I FIND MORE ABOUT SER?
-		Take a look at http://iptel.org/ser and http://www.openser.org
-		________________________________________________________
-	3.2.    WHERE CAN I POST A QUESTION ABOUT THIS MODULE?
-		In the webpages above there is access to mailing list. Use the users list for normal user support, use the dev 
-		list for development questions (bugs, fixes, etc). 
-		________________________________________________________
-	3.3.    HOW CAN I REPORT A BUG?
-		At the dev lists on the above webpages, and also at:
-		http://bugs.sip-router.org
-		________________________________________________________
-	3.4.    WHAT IS THE DIFFERENCE WITH OpenSER-TLS?
-		None. At least for now. The initial commit in both repositories 
-		(experimental tree for SER, HEAD for OpenSER) come from the same source:
-		an extended version of that released sometime late in 2004 by Peter Griffiths 
-		and modified by Cesc Santasusana.
-		________________________________________________________
-	3.5.    I AM NOT HAPPY WITH THIS README ... NOW WHAT?
-		Three things: 
-		1 - Complain to the maintainer.
-		2 - Contribute yourself with your acquired knowledge. It is welcome.
-		3 - Take a look at OpenSER tutorials for TLS: http://openser.org/docs/tls.html
-