foyyof的笔记 https://bbs.21ic.com/?89518 [收藏] [复制] [RSS]

日志

boa+auth+ssl我的一些经验(ZT)

已有 933 次阅读2006-12-15 09:12 |个人分类:LINUX资料收集|系统分类:嵌入式系统

BOA是个不错的小东西,不过标准版本只支持CGI,在做之前我是听说uclinux下的BOA是支持了ssl和auth的,不过我并没在意,因为开始觉得自己开发也不大需要这2个东西,不过后来觉得自己用CGI做验证太麻烦,干脆还是用webserver支持的吧,其实我想BOA标准版本是有计划做这个实现的好像,因为在其中我发现了send_r_unauthorized这个用来发送验证失败信息的函数,不过好像没函数用到他。
首先当然就是搞一个uclinux下的boa,不过我到uclinux网站发现内地方的ViewCVS竟然没有Download tarball 的连接,或者是我马虎没找到吧,我就搜啊艘,另找一个地方 http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/uclinux-h8/userland/boa/。

包找到了就开用吧,我先来说说AUTH。
在boa.conf中你可以增加一个类似Auth /cgi /home/teawater/boa/examples/pass的行让系统对cgi这个目录进行验证,其验证文件是/home/teawater/boa/examples/pass,内个文件的内容就是“用户名:密码”,其中密码用MD5,形式类似shadow中密码的形式。如果你编译的时候用了EMBED,则密码配制文件的形式为“passwd 密码”,其中密码用crypt过的密码,等于是个单用户验证模式。如果你将经常改变验证参数我建议你将 auth_add 函数后面加一个setvbuf(new_a->authfile,NULL,_IONBF,0)将验证文件的缓冲关掉,方式每次都从缓冲中读你的改变无法快速生效。
你觉得这种验证不爽,你可以对auth.c中2个函数 auth_authorize 和 auth_check_userpass 进行修改,主要是auth_check_userpass这个验证密码用的函数。
我发现这个auth有个缺点,不为CGI程序增加验证成功的用户名的环境变量,不过你可以自己增加一个,首先呢在globals.h的request结构中增加一个类似char auth_user[20]的东西用来储存验证后的用户名称,然后呢就在 auth_authorize中验证结束后将用户名拷进req->auth_user,最后就是设置环境变量了,在cgi.c的函数 complete_env 中,你可以看见别的环境变量是如何进去的,OK,自己起个环境变量名字(我忘记标准的环境变量名字是什么了 惭愧),然后把你得到的用户名放进去,OK,自己写个CGI看看把,我看到它了,你呢?:)

既然auth都搞定了,我就决定尝试一下ssl,反正下雨打孩子,闲着也是闲着。介绍以前我先说个事情,我找资料的时候吧看一个人回答另一个人如何让BOA支持ssl说用Stunnel,晕啊晕,用Stunnel我不如用apache+mod_ssl了,所以说大家不要盲目觉得外国人就厉害,其实外国人也是很能胡扯的,呼呼。
OK,说正题,首先在你的Makefile中加入
#ssl----------------------------------------------
LIBCRYPTO = -Lcrypt
#LIBSSL=-L/usr/lib/libssl.a
LIBSSL=-lssl
SSL_LIBS += $(LIBSSL) $(LIBCRYPTO)
CFLAGS += -DSERVER_SSL=1
LDFLAGS += $(SSL_LIBS)
#-------------------------------------------------
然后将#define SSL_KEYF #define SSL_CERTF 改成你证书的位置,你没证书?OK,一会我介绍如何做证书。现在你编译吧。
编译证书先确定你装了openssl,没装你自己一个去。然后用命令openssl req -new -x509 -days 365 -nodes -out ssl.pem -keyout ssl.pem。
这将会创建一个自己给自己签名的证书。参数的含义:
-days 365
使这个证书的有效期是1年,之后它将不能再用。
-new
创建一个新的证书
-x509
创建一个 X509 证书(自己签名的)
-nodes
这个证书没有密码
-out ssl.pem
把 SSL 证书写到哪里
-keyout ssl.pem
把 SSL 证书放到这个文件中
如果你有配制文件可以加上
-config openssl.cnf
OpenSSL 使用的配置文件
没配制文件的系统会问你些个问题,你就回答就OK了。然后你就得到证书了,将证书放到你刚才自己指定的位置。
OK,现在运行程序,可以看到显示SSL started,SSL连一下,过了。

恩,基本上这就是我的体会了,如果有什么错误和不足希望大家提出来,我也好进行改正,对了,再提一句,BOA可以将普通socket关掉的,因为无法配制某个目录只开SSL,我建议可以将普通socket关掉。

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)