模块初始化函数
作者:Rainbow(不经历风雨,怎么见彩虹)
创作时间:2002-10-1
/********************************************************************************************************************
声明:本文档用于学习与研究可以自由转载,无论以何种形式发布都必须保留完整的版权声明,商业用途不得转载.本人能力有限,如有问题欢迎交流与指正。
网站:
论坛:/forum/forum.html
邮件:rainbow_zrh@sina.com webmaster@infosecurity.org.cn
*********************************************************************************************************************/
初始化函数的实现文件为ssl_engine_init.c,下面对mod_ssl用到的初始化函数进行逐一讲解。
1、ssl_init_Module
【功能】:配置日志文件。
【过程描述】:
初始化次数nInitCount加1,ap_register_cleanup清除注册的钩子,ssl_config_global_create创建全局对象,设置默认值。ssl_log_open打开日志文件,输出初始信息。ssl_init_Engine初始化ENGINE,ssl_init_SSLLibrary,ssl_mutex_init初始化Mutex,ssl_scache_init初始化会话缓存,ssl_init_ConfigureServer读入服务器证书与私钥,ssl_init_CheckServers检查配置。ap_add_version_component输出Mod_ssl与OpenSSL的版本信息。
2、ssl_init_SSLLibrary
【功能】:初始化OpenSSL库。
【过程描述】:
3、ssl_init_Engine
ENGINE_by_id(设备)返回指定的ENGINE对象, ENGINE_ctrl(), ENGINE_set_default()设为默认的设备。
4、ssl_init_TmpKeysHandle
【功能】:初始化RSA与DH参数。
【过程描述】: 生成512/1024bit的RSA参数
5、ssl_init_ConfigureServer
【功能】:初始化指定的服务结构。
【过程描述】: 生成512/1024bit的RSA参数
6、ssl_init_CheckServers
【功能】:初始化指定的服务结构。
【过程描述】:这是一个最复杂的初始化函数,过程如下:
检查配置,SSL_CTX_new()生成SSL上下文,用SSL_CTX_set_options()对SSL_CTX进行设置,SSL_CTX_set_app_data将server_rec记录在SSL_CTX中,SSL_CTX_set_session_cache_mode设置会话缓存的模式,然后使用下列函数
SL_CTX_set_verify(ctx, nVerify, ssl_callback_SSLVerify)
SSL_CTX_sess_set_new_cb(ctx, ssl_callback_NewSessionCacheEntry)
SSL_CTX_sess_set_get_cb(ctx, ssl_callback_GetSessionCacheEntry)
SSL_CTX_sess_set_remove_cb(ctx, ssl_callback_DelSessionCacheEntry)
SSL_CTX_set_tmp_rsa_callback(ctx, ssl_callback_TmpRSA)
SSL_CTX_set_tmp_dh_callback(ctx, ssl_callback_TmpDH)
SSL_CTX_set_info_callback(ctx, ssl_callback_LogTracingState)
设置相对应的回调函数,SSL_CTX_set_cipher_list设置加密套件,SSL_CTX_load_verify_locations装入CA证书,ssl_init_FindCAList检查CA列表,SSL_CTX_set_client_CA_list设置客户端CA证书列表。
SSL_X509_STORE_create装入证书吊销列表。SSL_CTX_get_client_CA_list与sk_X509_NAME_num取CA列表并计算个算。SSL_CTX_use_certificate装入服务器证书,SSL_CTX_use_PrivateKey装入私钥。SSL_CTX_use_certificate_chain装入证书链。最后如果定义了SSL_VENDOR则调用ap::mod_ssl::vendor::configure_server钩子函数。
7、ssl_init_FindCAList
【功能】:生成CA证书列表。
【过程描述】:
ap_make_sub_pool分配子池,sk_X509_NAME_new创建新的名字堆栈,SSL_load_client_CA_file装入CA证书文件,sk_X509_NAME_find查找指定的CA名字对象,找到将它堆入sk_X509_NAME_push堆栈,sk_X509_NAME_free释放堆栈;
用同样的方法处理CA证书路径文件。ap_popendir打开目录,ap_pclosedir关闭目录,ap_destroy_pool释放分配的子池。
8、ssl_init_Child
【功能】:
【过程描述】:打开互斥锁文件。
9、ssl_init_ChildKill
【功能】:。
【过程描述】:现在什么事也不做。
10、ssl_init_ModuleKill
【功能】:
【过程描述】:
ssl_scache_kill、ssl_mutex_kill关闭会话缓存与互斥,ssl_init_TmpKeysHandle释放密钥及其参数,释放由apache内存池以外分配的内存,X509证书存贮区,公钥与私钥,SSL_CTX结构。如果定义了共享模块标志SHARED_MODULE,调用ERR_free_strings,EVP_cleanup,最后调用ssl_util_thread_cleanup结束。