首页 | 新闻资讯 | 培训认证 | 安全管理 | 病毒分析 | 安全协议 | 网络安全 | 防火墙 | 黑客技术
DB安全 | Web安全 | 入侵检测 | 安全审计 | 设备安全 | 备份恢复 | 安全标准 | 法律法规 | 无线安全
OS安全 | PKI与PMI | 病毒防治 | 隔离网闸 | XML安全 | 网管专区 | 经典案例 | 技术论坛 |  
+ 文章搜索 +
当前位置:首页>>原创作品>>PKI与PMI>>正文
关键字:
范 围:
※推荐文章※
·OpenSSL命令行常用功能(1)
·WEB安全模块源代码分析文档之十一
·WEB安全模块源代码分析文档之十-
·WEB安全模块源代码分析文档之九-
·WEB安全模块源代码分析文档之八-
·WEB安全模块源代码分析文档之七-
WEB安全模块源代码分析文档之三--Apache API 钩子函数
作者:rainbow 文章出处:中国信息安全组织[原创] 发布时间:2005-10-12 点击: 字体: 【
Apache API 钩子函数

作者:Rainbow(不经历风雨,怎么见彩虹)
创作时间:2002-10-1
/********************************************************************************************************************
声明:本文档用于学习与研究可以自由转载,无论以何种形式发布都必须保留完整的版权声明,商业用途不得转载.本人能力有限,如有问题欢迎交流与指正。
网站:
论坛:/forum/forum.html
邮件:rainbow_zrh@sina.com webmaster@infosecurity.org.cn
*********************************************************************************************************************/ 


1、ssl_hook_AddModule
【功能】:向核心注册模块。Ssl_engine_config.c中实现。
【过程描述】:声明MOD_SSL配置文件。调用ssl_var_register()、 ssl_ext_register()、 ssl_io_register()将模块链到APACHE核心。ssl_vendor_register注册VENDOR。
2、ssl_hook_RemoveModule
【功能】:向核心注销模块。Ssl_engine_config.c中实现。
【过程描述】:调用ssl_var_unregister()、 ssl_ext_unregister()、ssl_io_unregister()将模块从核心中注销。
3、ssl_hook_RewriteCommand
【功能】:指令重写。Ssl_engine_config.c中实现。
【过程描述】:如果定义与以前兼容则调用ssl_compat_directive函数进行重写,否则什么也不做。
4、ssl_hook_NewConnection
【功能】:将SSL连上accept socket时触发这个钩子函数,Apache1.3没有提供这个钩子函数,所以只能给http_mail打个补丁就可以了。
【过程描述】:
准备阶段:ssl_rand_seed初始化随机数生成器,SSL_new生成SSL对象,SSL_clear清除数据,SSL_set_session_id_context设置由ap_md5生成的会话ID,SSL_set_app_data设置应用数据,ap_ctx_new生成新的ap_ctx,然后往里添加变量ssl::request_rec,ssl::verify::depth,将新生成的结构用SSL_set_app_data2加到ssl对象中。SSL_set_fd将新建立的连接加到SSL上,接下来预设SSL_set_tmp_rsa_callback设置回调和SSL_set_verify_result设置客户端验证的结果。
握手阶段:SSL_is_init_finished判断是否完成握手,没有则由SSL_accept接受这个连接,如果失败,先判断失败的类型,进行分类错误处理:若返回SSL_ERROR_ZERO_RETURN,则由SSL_set_shutdown与SSL_smart_shutdown关闭SSL连接,SSL_free释放SSL对象,返回。若返回SSL_R_HTTP_REQUEST,则输出状态到日志,跳过请求行的剩余字节,伪造一个GET /mod_ssl:error:HTTP-request HTTP/1.0\r\n请求行,由SSL_set_shutdown与SSL_smart_shutdown关闭SSL连接,SSL_free释放SSL对象,友好的返回由Apache继续执行。若超时,返回SSL_ERROR_SYSCALL等进行类似处理,在这里不进行赘述。如果成功,接下来,进行处理客户验证的结果,SSL_get_verify_result返回X509_V_OK说明成功,不成功则由SSL_set_shutdown与SSL_smart_shutdown关闭SSL连接,SSL_free释放SSL对象,返回。如果成功取出对方的名字存在ssl::client::dn中。调用SSL_is_init_finished判断握手是否成功,不成功重复握手过程。成功继续下一个步骤。
收尾阶段:设置超时标志ssl::handshake::timeout为FALSE,调用ap::mod_ssl::vendor::new_connection钩子函数进行Vendor的更多处理。
5、ssl_hook_TimeoutConnection
【功能】:SSL握手阶段超时信号处理函数。
【过程描述】:设置超时标志为TRUE。
6、ssl_hook_CloseConnection
【功能】:在Socket关闭之间调用,在这里进行更多的SSL处理。
【过程描述】:首先由ap_bflush刷新缓冲区,从客户端socket的ctx中取出关闭通知信息,关闭SSL,设置cpType关闭类型为关闭通知消息对应的unclean、accurate、standard。SSL_smart_shutdown自然关闭,释放SSL对象。
7、ssl_hook_Translate
【功能】:URL转换处理函数
【过程描述】:将HTTPS连入的信息输出到日志,将SetEnvIf信息从request_rec移到conn_rec/BUF中,供关闭连接处理函数使用。
8、ssl_hook_Auth
【功能】:验证处理函数
【过程描述】:首先设置ssl-access-forbidden标志禁止访问,用户的DN当成用户名,密码还是密码,伪造HTTP的基本验证头。
9、ssl_hook_UserCheck
【功能】:
【过程描述】:如果设置了SSL_OPT_STRICTREQUIRE,ssl-access-forbidden,返回FORBIDDEN,否则返回DECLINED继续进行。
10、ssl_hook_Access
【功能】:存取处理函数
【过程描述】:从SSL_get_SSL_CTX中取出SSL_CTX,保存旧的加密套件,设置新的加密套件。如果新旧的加密套件都为空,则强制进行加密套件的重新协商。接着重写验证的深度,设置新的验证深度,如果设置不成功,强制进行验证深度的重新协商。重写对客户端的验证方式,记住旧的状态,设置新的状态。失败则强制进行验证方式的重新协商。装入CA证书,及证书生路径,设置新的证书路径。如果上面的重写过程需要进行重新协商,现在开始重新协商。
重新协商的过程是这样的:取对方的证书链与证书,取证书存贮区指针并初始化它,设置验证深度,进行证书验证,如果是完全的重新协商过程,则SSL_set_session_id_context设置会话ID结构,SSL_renegotiate,SSL_do_handshake重新开始握手,取对方证书的DN,检查协商的结果,检查SSLRequire的表达式。
11、ssl_hook_Fixup
【功能】:
【过程描述】:ap_table_set设置子进程环境变量r->subprocess_env中HTTPS值为on, SSL_SERVER_CERT为服务器证书,SSL_CLIENT_CERT值为客户端证书SSL_CLIENT_CERT_CHAIN_X为证书链内容。
12、ssl_hook_ReadReq
【功能】:读到请求后进行处理,
【过程描述】:从ctx中取出ssl对象与apctx对象,往request_rec中添加mothod与port为https与443,handler为mod_ssl:content-handler,让mod_ssl内容处理器遇到这类情况时进行处理。
13、ssl_hook_Handler
【功能】:内容处理函数
【过程描述】:如果request_rec中的uri前9个字节为/mod_ssl:,返回继续处理。如果为uri为/mod_ssl:error:HTTP-request返回错误的HTTP请求,同时输出正确用法的提示。
返回顶部↑】 【推荐好友】 【查看评论
用户名: 新注册) 密码: 匿名评论 [查看评论] 发表评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  Copyright © 2004-2005 infosecurity.org.cn . All Rights Reserved
版权所有:中国信息安全组织 系统管理:webmaster@infosecurity.net.cn
本站部分资源来自互联网,如有侵犯您的版权或其他问题,请通知管理员,我们会尽快处理!