[精華] 原來(lái)win+apache實(shí)現(xiàn)ssl的證書(shū)認(rèn)證如此簡(jiǎn)單


http://www.chinaunix.net 作者:ataman??發(fā)表于:2006-02-26 15:45:34
發(fā)表評(píng)論】【查看原文】【Web服務(wù)器討論區(qū)】【關(guān)閉

windows+apache的情況下,實(shí)現(xiàn)ssl的證書(shū)認(rèn)證
(win下用openssl做證書(shū)極為困難的問(wèn)題徹底解決了)

我寫(xiě)得非常詳細(xì),一步一步都說(shuō)得很清楚。實(shí)際操作極為簡(jiǎn)單,要不了5分鐘,是我的字打得太多了.如果發(fā)現(xiàn)錯(cuò)誤,遺漏請(qǐng)?zhí)岢觥?

首先,到http://hunter.campbus.com/去下載和自己的apache版本相同的的Apache_xxx-xxxOpenssl_xxx-Win32.zip。解壓縮后找到這5個(gè)文件mod_ssl.so(modules目錄),ssl.conf,ssl.default.conf(conf目錄,

其中default.conf作為備份),libeay32.dll,?ssleay32.dll(這2個(gè)都在bin目錄)。把它們?nèi)紡?fù)制到你自己的apahce下的對(duì)應(yīng)目錄。



###############################################################################

接下來(lái),更改設(shè)置文件


對(duì)于httpd.conf和ssl.conf,如果你的服務(wù)器沒(méi)有域名,那么servername就填ip好了。
比如:ServerName?10.10.10.10:80(httpd.conf)
ServerName?10.10.10.10:443(ssl.conf)

打開(kāi)httpd.conf:
找到#LoadModule?ssl_module?modules/mod_ssl.so,去掉前面的‘#‘,這樣就在啟動(dòng)時(shí)加載了ssl模塊。

打開(kāi)ssl.conf:
找到#<IfDefine?SSL>;和#</IfDefine>;,把前面的’#‘號(hào)都去掉,否則啟動(dòng)apache時(shí)還要加參數(shù),麻煩。
如下設(shè)置:
SSLMutex?none?????????????????????????(這個(gè)我是none,有人是default,具體怎么設(shè)可以研究一下)
SSLCertificateFile?conf/server.crt????(服務(wù)器證書(shū)的位置,就是公鑰吧?)
SSLCertificateKeyFile?conf/server.key?(服務(wù)器私鑰的位置)
SSLCACertificateFile?conf/ca.crt??????(CA根證書(shū)的位置,進(jìn)行客戶(hù)端驗(yàn)證時(shí)需要。也是一個(gè)CA公鑰吧?

我把它們都放在apache的conf目錄下了)
DocumentRoot?"xxxxx"??????????????????(指向要ssl加密認(rèn)證的文檔目錄,比如"f:/http")

SSLVerifyClient?require???????????????(去掉前面的‘#’號(hào),進(jìn)行客戶(hù)端驗(yàn)證時(shí)需要)
SSLVerifyDepth??1?????????????????????(去掉前面的‘#’號(hào),把10改為1,進(jìn)行客戶(hù)端驗(yàn)證時(shí)需要)



##############################################################################
現(xiàn)在,就要制作證書(shū)了


去openvpn.net下載并安裝openvpn。
這是一個(gè)虛擬個(gè)人網(wǎng)絡(luò)制作工具,他能完美的在win(linux,BSD也行)下制作根、服務(wù)器、客戶(hù)端證書(shū)。
安裝完畢后,開(kāi)始-程序-附件-命令提示符,進(jìn)到openvpn的easy-rsa目錄,比如:
f:\program?files\openvpn\easy-rsa>;_
輸入:
init-config?回車(chē)

會(huì)產(chǎn)生幾個(gè)文件,切換出來(lái),打開(kāi)vars.bat文件,修改其中的KEY_COUNTRY(國(guó)家2位字母),?KEY_PROVINCE(省2位字母),?KEY_CITY(城市),?KEY_ORG(組織),??KEY_EMAIL(電子郵箱)這幾個(gè)參數(shù),免的后面制證時(shí)

反復(fù)輸入麻煩。保存退出,繼續(xù)使用命令提示符。
依次輸入以下兩個(gè)命令,當(dāng)然是分別回車(chē)嘍:
vars
clean-all???(這兩個(gè)是準(zhǔn)備工作)




####################################################################################


1.
建立CA根證書(shū)


接著輸入build-ca???回車(chē)(這個(gè)就是建立CA根證書(shū)啦)


然后顯示:

ai:/usr/share/openvpn/easy-rsa?#?./build-ca
Generating?a?1024?bit?RSA?private?key
............++++++
...........++++++
writing?new?private?key?to?'ca.key'
-----
You?are?about?to?be?asked?to?enter?information?that?will?be?incorporated
into?your?certificate?request.
What?you?are?about?to?enter?is?what?is?called?a?Distinguished?Name?or?a?DN.
There?are?quite?a?few?fields?but?you?can?leave?some?blank
For?some?fields?there?will?be?a?default?value,
If?you?enter?'.',?the?field?will?be?left?blank.
-----
Country?Name?(2?letter?code)?[KG]:??????????國(guó)家名2位字母,默認(rèn)的參數(shù)就是我們剛才修改過(guò)的。
State?or?Province?Name?(full?name)?[NA]:????省、州名2位字母
Locality?Name?(eg,?city)?[BISHKEK]:?????????城市名
Organization?Name?(eg,?company)?[OpenVPN-TEST]:?????組織名
Organizational?Unit?Name?(eg,?section)?[]:???????????組織里的單位名
Common?Name?(eg,?your?name?or?your?server's?hostname)?[]:這個(gè)是關(guān)鍵,應(yīng)該輸入頒發(fā)根證書(shū)單位的域名

,不過(guò)因?yàn)槭歉C書(shū),所以怎么填都無(wú)所謂。只有服務(wù)器證書(shū)才需要認(rèn)真填。
Email?Address?[me@myhost.mydomain]:?電子郵箱

好了,CA根證書(shū)制作完成!在keys目錄下,它的名字就叫ca.crt,CA的私鑰是ca.key


#######################################################################


2.
現(xiàn)在制作服務(wù)器證書(shū):
在命令提示符下,輸入
build-key-server?server???回車(chē)
你會(huì)看到和上面很相似的東西
但要注意這里的Common?Name?(eg,?your?name?or?your?server's?hostname)?[]:
這個(gè)才是真正的關(guān)鍵。這里應(yīng)該輸入服務(wù)器的域名比如www.xxx.com。
如果沒(méi)有域名,就應(yīng)該填ip,與httpd.conf和ssl.conf里的設(shè)置對(duì)應(yīng),
ServerName?10.10.10.10:80(httpd.conf)
ServerName?10.10.10.10:443(ssl.conf)

也就是說(shuō)填:10.10.10.10

接下來(lái)看到?a?challenge?password?[]:填不填隨便,我不填
an?optional?company?name?[]:?填不填隨便,我不填

sign?the?certificate??[y/n]?敲y回車(chē)。用CA根證書(shū)對(duì)服務(wù)器證書(shū)簽字認(rèn)證。
1?out?1?certificate?requests?certified,commit??[y/n]?敲y回車(chē),確認(rèn)。

好了,建好了在keys目錄下的server.crt(證書(shū))和server.key(私鑰)


#######################################################################


3.
現(xiàn)在制作客戶(hù)端證書(shū):

在命令提示符下,輸入
build-key?client1???回車(chē)
又是一通國(guó)家省市組織等等,comman?name也是隨便填的。
然后
a?challenge?password?[]:填不填隨便,我不填
an?optional?company?name?[]:?填不填隨便,我不填

sign?the?certificate??[y/n]?敲y回車(chē)。用CA根證書(shū)對(duì)客戶(hù)端證書(shū)簽字認(rèn)證。
1?out?1?certificate?requests?certified,commit??[y/n]?敲y回車(chē),確認(rèn)。

好了,建好了在keys目錄下的client1.crt(客戶(hù)端證書(shū))和client1.key(私鑰)

等等,?.crt的客戶(hù)端證書(shū)是不能使用的,必須把它轉(zhuǎn)化為.pfx格式的文件!!

所以,還是在命令提示符下,輸入
openssl?回車(chē)
看到openssl>;
再輸入
pkcs12?-export?–in?keys/client1.crt?-inkey?keys/client1.key?-out?keys/client1.pfx
回車(chē),
看到Enter?export?password:會(huì)要求你建立客戶(hù)端證書(shū)的輸出密碼,我填hehe,
verifying-Enter?export?password再確認(rèn)一遍hehe,好了!


########################################################################


把keys目錄下的ca.crt和server.crt,server.key都復(fù)制到apache的conf目錄下,(ssl.conf需要)
ca.key自己保留吧,找個(gè)合適的地方儲(chǔ)存起來(lái).


#########################################################################


客戶(hù)端安裝證書(shū)


打開(kāi)internet?explorer(IE),工具-internet選項(xiàng)-內(nèi)容-證書(shū),點(diǎn)選'個(gè)人'
再點(diǎn)擊導(dǎo)入,把客戶(hù)端證書(shū)client1.pfx導(dǎo)入到個(gè)人組里(別忘了擴(kuò)展名是pfx)。
這里還要輸入剛才建立的輸出密碼hehe才能倒入呢。

接著,點(diǎn)選'受信任的根證書(shū)頒發(fā)機(jī)構(gòu)',點(diǎn)擊導(dǎo)入,把CA根證書(shū)ca.crt導(dǎo)入到受信任的根證書(shū)頒發(fā)機(jī)構(gòu)里。


#########################################################################

好啦,重新啟動(dòng)apache,打開(kāi)IE,
在地址欄里輸入https://10.10.10.10或者域名,彈出個(gè)窗口要選擇個(gè)人的數(shù)字證書(shū)。
點(diǎn)選,然后確定。
如果服務(wù)器證書(shū)的common?name填寫(xiě)正確的話(huà),你就可以直接進(jìn)入網(wǎng)站了,看到右下角的小鎖頭(可靠的SSL128位)。
如果服務(wù)器證書(shū)的common?name填寫(xiě)不正確,就會(huì)彈出個(gè)‘安全警報(bào)’框,告訴你3條:
1.安全證書(shū)由信任的站點(diǎn)頒發(fā)
(如果說(shuō)是由不信任的站點(diǎn)頒發(fā),那就是你的ca根證書(shū)ca.crt沒(méi)有導(dǎo)入到ie的受信任的根證書(shū)頒發(fā)機(jī)構(gòu)里)

2.安全證書(shū)的日期有效?
(這個(gè)日期缺省是10年,可以在openvpn的easy-rsa目錄下的openssl.cnf里調(diào)整修改,然后重新制作一整套證書(shū)(openssl.cnf看起來(lái)像撥

號(hào)網(wǎng)絡(luò)的快捷方式,要用記事本,寫(xiě)字板打開(kāi)修改))

3.“安全證書(shū)上的名稱(chēng)無(wú)效,或者與站點(diǎn)名稱(chēng)不匹配”
這就是服務(wù)器證書(shū)的common?name填寫(xiě)不正確所致,不過(guò)這也沒(méi)關(guān)系,有人好像愿意這樣。我是不想看到這個(gè)警告框,煩人。

即使有安全警報(bào),你仍能進(jìn)入網(wǎng)站,看到右下角的小鎖頭(可靠的SSL128位)


#################################
最后,成功啦!用吧。

我自己把httpd.conf里的listen?80都加#注釋了,servername改為10.10.10.10:443,只用https不用http,嗬嗬!!!