包找到了就開用吧,我先來說說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關掉。
摘自:linuxforum.net