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

/********************************************************************************************************************
声明:本文档用于学习与研究可以自由转载,无论以何种形式发布都必须保留完整的版权声明,商业用途不得转载.本人能力有限,如有问题欢迎交流与指正。
网站:
论坛:/forum/forum.html
邮件:rainbow_zrh@sina.com webmaster@infosecurity.org.cn
*********************************************************************************************************************/ 
1、以上对基于OpenSSL的mod_ssl进行了简要的分析,由于在很短的时间里将平常学习与工作过程中所做工作写下来,加上本人的水平有限,所以错误与不足再所难免,希望大家多多批评与指正。
2、同时也希望更多的人参与到研究、整理及翻译信息安全理论与应用技术的行列中来,努力提高中国的信息安全技术水平。
3、下面讲一个简单的应用实例
要求:基于apache的web应用,要求128位加密传输,基于x.509数字证书的身份认证,用户证书使用usbkey存贮证书。双因子认证。在应用能够取取用户的身份,进行控制。

实现方案:
(1)给apache配置mod_ssl支持。
(2)使用CISO的企业级CA发证书,给apache配置证书。
(3)购买USB-key,在客户端安全驱动及CSP。在客户端安全根证书。
(4)修改mod_ssl的源代码,将认证过的信息加载到HTTP协议中,这样在脚本语言中可以取到用户的认证信息,就可以根据这个用户进行授权了。
修改的源码如下:
a、在new一个连接的时候加入如下的代码:

在变量中加入sn与dn
/*
* Remember the peer certificate's DN and SN 
*/
if ((xs = SSL_get_peer_certificate(ssl)) != NULL) {
    cp = X509_NAME_oneline(X509_get_subject_name(xs), NULL, 0);
    ap_ctx_set(fb->ctx, "ssl::client::dn", ap_pstrdup(conn->pool, cp));

    lsn = ASN1_INTEGER_get(X509_get_serialNumber(xs));
    cpsn = ap_psprintf(conn->pool,"%ld",lsn);
    ap_ctx_set(fb->ctx,"ssl::client::sn",cpsn);

    OPENSSL_free(cp);
    X509_free(xs);
}

b、在post read request的时候加入如下的代码:
取出dn与sn
// get the peer certificate's DN and SN

if ((clientdn = (char *)ap_ctx_get(r->connection->client->ctx, "ssl::client::dn")) != NULL)
{
     ap_snprintf(dn, sizeof(dn), "%s", clientdn);
     ap_table_set(r->headers_in,"UserName",dn);
}
if ((clientsn = (char *)ap_ctx_get(r->connection->client->ctx, "ssl::client::sn")) != NULL)
{
    ap_snprintf(sn, sizeof(sn), "%s", clientsn);
    ap_table_set(r->headers_in,"CertID",sn);
}
例如使用PHP语言,就可以通过$_SERVER['username']就能取到用户身份信息。
其它的就不多说,有什么问题到论坛提问。
返回顶部↑】 【推荐好友】 【查看评论
用户名: 新注册) 密码: 匿名评论 [查看评论] 发表评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  Copyright © 2004-2005 infosecurity.org.cn . All Rights Reserved
版权所有:中国信息安全组织 系统管理:webmaster@infosecurity.net.cn
本站部分资源来自互联网,如有侵犯您的版权或其他问题,请通知管理员,我们会尽快处理!