前一周多,小組內的同事碰到了客戶的新問題

對方提問咱家的產品是否有提供與AAA伺服器的服務

其實就是有無提供RADIUS伺服器認證

剛好我在上一家公司有做過相關部分的工作,所以就毛遂自薦嚕

環境如下:

1. Lenovo notebook with Ubuntu Linux(版本我忘了)充當RADIUS的伺服器,選用的是freeradius這個軟體

2. Dlink DI-427+ wireless router一台 (很爛,只有支援到WPA EAP的認證)

3. 遠端的隨便notebook with Windows XP一台充當client端

由於離上次架RADIUS的時間已經超過一年多了 囧rz,很多基本的東西都忘了

加上Ubuntu裡面有apt-get這個大魔鬼,所以很自然的就先apt-get install freeradius,八特.....

人算不人天算,學tarball起家的我,時間很不能接受時代變遷的新產品

過程除了產生很多build denpendency的問題(迷之聲: apt-get不是很強大,可以解掉相依性問題)

還有就是一些freeradius所用到的相關data base問題

最後乾脆全部移除,跑去下載了最新的freeradius tarball (在下用的是2.1.6版)

用土法煉鋼的方式,終於把伺服器架起來了

廢話不說,咱馬上進入正題

1. 上網下載freeradius,網址http://freeradius.org/download.html,小弟用的版號是2.1.6,不要跟我差太多版應該就還好

2. 解壓縮並切換到此目錄下 (以下#號開頭的皆為linux下root的權限,不習慣換到root的人請不要忘了加 sudo)

#tar zxvf freeradius-server-2.1.6.tar.gz (各位看官阿,指令、檔案名之間都有空格,不要像上次某人還跑過來問我:你的網誌上寫的都是騙人的 囧rz)

#cd freeradius-server-2.1.6

3. 產生makefile與開始編譯程式

#./configure (若這步驟有問題,請試試看後面加參數 --with-system-libtool,這要視你的error message去判斷,小弟是遇到libtool的問題)

#make

#make install

4. 編譯完之後,主要的幾個設定檔會放在系統目錄下 /usr/local/etc/raddb,若是不習慣的請自行在產生make檔案的時候去指定prefix

由於小弟沒有使用data base或其他的外掛模組,基本使用者就是系統上的使用者了,下面是幾個主要的設定檔案 (內容後面會貼上)

radiusd.conf: 最主要的設定檔案,設定此RADIUS伺服器是否有支援eap, sql, proxy等等等,小弟只是希望快速驗證,所以只有mark掉sql部分

clients.conf: client端的設定檔案,我AP的設定檔就寫在裡面了,沒有複雜的設定

eap.conf: 認證最重要的設定,舉凡tls, ttls等等,都在此設定

5. 產生伺服器憑證與客戶端憑證,這個是我搞最久的部分,google好多文章,最後trial and error才搞出來的,要產生憑證前先確認自己的linux上已經有裝好了openssl

#cd /usr/lib/ssl/misc/ (這個路徑是我電腦預設裝好的openssl的目錄,各位看官自行前往相對應的目錄)

#./CA.pl -newca (預設會在此目錄下產生一個名為demoCA的新目錄,裡面會有基本相關的檔案,若是想更名的,請自行修改CA.pl)

......(下來是一連串產生憑證的問答,只列出我有填寫且重要的部分,紅字部分為電腦提問,藍字是我自己填入的)

Enter PEM pass phrase: 12345 (自行輸入憑證密碼)

Country Name (2 letter code) [AU]:TW

State or Province Name (full name) [Some-State]:Taipei

Locality Name (eg, city) []:Taipei

Organization Name (eg, company) [Internet Widgits Pty Ltd]:SOD

Organizational Unit Name (eg, section) []:AV

Common Name (eg, YOUR name) []:Makoto

Email Address []:makoto@sod.com

6. 伺服器端認證檔案

#openssl req -new -nodes -keyout srv_key.pem -out srv_req.pem -config ../openssl.cnf (請注意openssl.cnf這個檔案,在小弟的電腦內此檔案位於/usr/lib/ssl/裡面)

#openssl ca -config ../openssl.cnf -policy policy_anything -out srv_cert.pem -infiles ./srv_req.pem

#cat srv_key.pem srv_cert.pem > srv_keycert.pem

7. 客戶端認證檔案,產生後請將cli_cert.pem複製到自己想要認證的電腦上面,點選右鍵->匯入憑證,這樣就可以了

#openssl req -new -keyout cli_key.pem -out cli_req.pem -config ../openssl.cnf

#openssl ca -config ../openssl.cnf -policy policy_anything -out cli_cert.pem -infiles ./cli_req.pem

#openssl pkcs12 -export -in cli_cert.pem -inkey cli_key.pem -out cli_cert.p12 -clcerts (此步驟為要轉成windows XP下可用的憑證檔案格式)

8. 產生兩個使用tls憑證需要用到的檔案

#openssl dhparam -check -text -5 512 -out dh

#dd if=/dev/urandom of=random count=2

9. 記得把上述的伺服器端檔案copy到/usr/local/etc/raddb/certs,因為freeradius內的設定檔預設憑證會放在這邊,若是想改到自己的喜歡的目錄下,請自行修改

10. 接下來編輯一下第四點所提到的三個檔案,小弟用的是tls憑證

radiusd.conf: (mark了三行,下面的紅色井字號為mark)

#$INCLUDE sql.conf

#INCLUDE sql/mysql/counter.conf

#$INCLUDE sqlippool.conf

clients.conf: (添加了下列幾行,192.168.1.1是小弟AP的IP位址,secret是密碼請自行設定)

client 192.168.1.1 {
        secret          = sodisgood
        shortname   = sod-ap
}

eap.conf: (修改了一些部分,並且添加了tls憑證部分)

default_eap_type = tls (原本是md5)

private_key_password = 12345 (產生憑證時輸入的密碼)

private_key_file = ${certdir}/srv_keycert.pem (當時後產生的伺服器憑證)

certificate_file = ${certdir}/server_keycert.pem (同上)

CA_file = ${cadir}/cacert.pem (這個檔案會在demoCA裡面)

dh_file = ${certdir}/dh (tls需要用到的檔案)

random_file = ${certdir}/random (同上)

11. 這時候可以啟動伺服器了,有問題的話請注意一下error message喔,每個人遇到的狀況不一定會相同

#radiusd -X & (-X是debug mode,&是背景執行)

12. 設定AP,這點也是端看各位使用的AP不同而會有所不同,所以我只說明大概的設定法,其他的請看倌自行設定了(請記得連接RADIUS伺服器電腦與AP)

登入AP設定網頁>>無線網路設定>>安全模式>>選擇WPA>>填入RADIUS伺服器的IP位址(看AP的資訊就有了)、連接埠(內建是1812)、RADIUS密碼(與在clients.conf裡面的要一致)

13. 在windows xp下直接用WZC去連接自己的AP,若一切都順利你會看到無線網路會顯示正在驗證你的憑證之類的訊息


以上........

呼~寫得有點亂,希望對有要架設RADIUS的人有所幫助

若是有人要分享更仔細的設定或是SSL的用法,請不吝指教^^

創作者介紹
創作者 Life Nerd 的頭像
Life Nerd

Memory

Life Nerd 發表在 痞客邦 留言(19) 人氣()