原來win+apache實現ssl的證書認證如此簡單
windows+apache的情況下,實現ssl的證書認證
(win下用openssl做證書極為困難的問題徹底解決了)
我寫得非常詳細,一步一步都說得很清楚。實際操作極為簡單,要不了5分鐘,是我的字打得太多了.如果發現錯誤,遺漏請提出。
首先,到http://hunter.campbus.com/去下載和自己的apache版本相同的的Apache_xxx-xxxOpenssl_xxx-Win32.zip。解壓縮后找到這5個文件mod_ssl.so(modules目錄),ssl.conf,ssl.default.conf(conf目錄,
其中default.conf作為備份),libeay32.dll, ssleay32.dll(這2個都在bin目錄)。把它們全都複製到你自己的apahce下的對應目錄。
###############################################################################
接下來,更改設置文件
對於httpd.conf和ssl.conf,如果你的伺服器沒有域名,那麼servername就填ip好了。
比如:ServerName 10.10.10.10:80(httpd.conf)
ServerName 10.10.10.10:443(ssl.conf)
打開httpd.conf:
找到#LoadModule ssl_module modules/mod_ssl.so,去掉前面的『#『,這樣就在啟動時載入了ssl模塊。
打開ssl.conf:
找到#<IfDefine SSL>;和#</IfDefine>;,把前面的』#『號都去掉,否則啟動apache時還要加參數,麻煩。
如下設置:
SSLMutex none (這個我是none,有人是default,具體怎麼設可以研究一下)
SSLCertificateFile conf/server.crt (伺服器證書的位置,就是公鑰吧?)
SSLCertificateKeyFile conf/server.key (伺服器私鑰的位置)
SSLCACertificateFile conf/ca.crt (CA根證書的位置,進行客戶端驗證時需要。也是一個CA公鑰吧?
我把它們都放在apache的conf目錄下了)
DocumentRoot "xxxxx" (指向要ssl加密認證的文檔目錄,比如"f:/http")
SSLVerifyClient require (去掉前面的『#』號,進行客戶端驗證時需要)
SSLVerifyDepth 1 (去掉前面的『#』號,把10改為1,進行客戶端驗證時需要)
##############################################################################
現在,就要製作證書了
去openvpn.net下載並安裝openvpn。
這是一個虛擬個人網路製作工具,他能完美的在win(linux,BSD也行)下製作根、伺服器、客戶端證書。
安裝完畢后,開始-程序-附件-命令提示符,進到openvpn的easy-rsa目錄,比如:
f:\program files\openvpn\easy-rsa>;_
輸入:
init-config 回車
會產生幾個文件,切換出來,打開vars.bat文件,修改其中的KEY_COUNTRY(國家2位字母), KEY_PROVINCE(省2位字母), KEY_CITY(城市), KEY_ORG(組織), KEY_EMAIL(電子郵箱)這幾個參數,免的後面制證時
反覆輸入麻煩。保存退出,繼續使用命令提示符。
依次輸入以下兩個命令,當然是分別回車嘍:
vars
clean-all (這兩個是準備工作)
####################################################################################
1.
建立CA根證書
接著輸入build-ca 回車(這個就是建立CA根證書啦)
然後顯示:
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) : 國家名2位字母,默認的參數就是我們剛才修改過的。
State or Province Name (full name) : 省、州名2位字母
Locality Name (eg, city) : 城市名
Organization Name (eg, company) : 組織名
Organizational Unit Name (eg, section) []: 組織里的單位名
Common Name (eg, your name or your server's hostname) []:這個是關鍵,應該輸入頒髮根證書單位的域名
,不過因為是根證書,所以怎麼填都無所謂。只有伺服器證書才需要認真填。
Email Address : 電子郵箱
好了,CA根證書製作完成!在keys目錄下,它的名字就叫ca.crt,CA的私鑰是ca.key
#######################################################################
2.
現在製作伺服器證書:
在命令提示符下,輸入
build-key-server server 回車
你會看到和上面很相似的東西
但要注意這裡的Common Name (eg, your name or your server's hostname) []:
這個才是真正的關鍵。這裡應該輸入伺服器的域名比如www.xxx.com。
如果沒有域名,就應該填ip,與httpd.conf和ssl.conf里的設置對應,
ServerName 10.10.10.10:80(httpd.conf)
ServerName 10.10.10.10:443(ssl.conf)
也就是說填:10.10.10.10
接下來看到 a challenge password []:填不填隨便,我不填
an optional company name []: 填不填隨便,我不填
sign the certificate? 敲y回車。用CA根證書對伺服器證書籤字認證。
1 out 1 certificate requests certified,commit? 敲y回車,確認。
好了,建好了在keys目錄下的server.crt(證書)和server.key(私鑰)
#######################################################################
3.
現在製作客戶端證書:
在命令提示符下,輸入
build-key client1 回車
又是一通國家省市組織等等,comman name也是隨便填的。
然後
a challenge password []:填不填隨便,我不填
an optional company name []: 填不填隨便,我不填
sign the certificate? 敲y回車。用CA根證書對客戶端證書籤字認證。
1 out 1 certificate requests certified,commit? 敲y回車,確認。
好了,建好了在keys目錄下的client1.crt(客戶端證書)和client1.key(私鑰)
等等, .crt的客戶端證書是不能使用的,必須把它轉化為.pfx格式的文件!!
所以,還是在命令提示符下,輸入
openssl 回車
看到openssl>;
再輸入
pkcs12 -export –in keys/client1.crt -inkey keys/client1.key -out keys/client1.pfx
回車,
看到Enter export password:會要求你建立客戶端證書的輸出密碼,我填hehe,
verifying-Enter export password再確認一遍hehe,好了!
########################################################################
把keys目錄下的ca.crt和server.crt,server.key都複製到apache的conf目錄下,(ssl.conf需要)
ca.key自己保留吧,找個合適的地方儲存起來.
#########################################################################
客戶端安裝證書
打開internet explorer(IE),工具-internet選項-內容-證書,點選'個人'
再點擊導入,把客戶端證書client1.pfx導入到個人組裡(別忘了擴展名是pfx)。
這裡還要輸入剛才建立的輸出密碼hehe才能倒入呢。
接著,點選'受信任的根證書頒發機構',點擊導入,把CA根證書ca.crt導入到受信任的根證書頒發機構里。
#########################################################################
好啦,重新啟動apache,打開IE,
在地址欄里輸入https://10.10.10.10或者域名,彈出個窗口要選擇個人的數字證書。
點選,然後確定。
如果伺服器證書的common name填寫正確的話,你就可以直接進入網站了,看到右下角的小鎖頭(可靠的SSL128位)。
如果伺服器證書的common name填寫不正確,就會彈出個『安全警報』框,告訴你3條:
1.安全證書由信任的站點頒發
(如果說是由不信任的站點頒發,那就是你的ca根證書ca.crt沒有導入到ie的受信任的根證書頒發機構里)
2.安全證書的日期有效
(這個日期預設是10年,可以在openvpn的easy-rsa目錄下的openssl.cnf里調整修改,然後重新製作一整套證書(openssl.cnf看起來像撥
號網路的快捷方式,要用記事本,寫字板打開修改))
3.「安全證書上的名稱無效,或者與站點名稱不匹配」
這就是伺服器證書的common name填寫不正確所致,不過這也沒關係,有人好像願意這樣。我是不想看到這個警告框,煩人。
即使有安全警報,你仍能進入網站,看到右下角的小鎖頭(可靠的SSL128位)
#################################
最後,成功啦!用吧。
我自己把httpd.conf里的listen 80都加#註釋了,servername改為10.10.10.10:443,只用https不用http,嗬嗬!!!
《解決方案》
原來win+apache實現ssl的證書認證如此簡單
就這麼容易。老夫也去試試
《解決方案》
原來win+apache實現ssl的證書認證如此簡單
關於ssl.conf文件里的指令很多我也不明白,請指點。
《解決方案》
原來win+apache實現ssl的證書認證如此簡單
證書認證 ?這個是什麼證書?
《解決方案》
原來win+apache實現ssl的證書認證如此簡單
查了好多都不好用。試試先。
《解決方案》
原來win+apache實現ssl的證書認證如此簡單
good
《解決方案》
原來win+apache實現ssl的證書認證如此簡單
在「build-key client1」時出現了錯誤,見下:
"Sign the certificate? :y
failed to update database
TXT_DB error number 2
找不到 C:\Program Files\OpenVPN\easy-rsa\keys\*.old"
請指教
《解決方案》
原來win+apache實現ssl的證書認證如此簡單
this problem happens rarely....if happens..you need remake.just restart the process ...
init-config....
vars....
clean....
and so on
there's a file named build-key-pkcs12...you can use it to make client certificate with extend filename '*.p12'....and no need input "build-key.....openssl.....pkcs12....."
1.你用的windows xp嗎?或是別的版本?win9x下好像不行
2.我講的這個方法是先製做client1.crt,再這樣轉換為client1.pfx。其實不用這麼麻煩。
openvpn/easy-rsa下面就有一個可以直接做client1.p12客戶證書的。(p12和pfx是等價的)
build-key-pkcs12 client1
也就是說不必輸入以下
build-key client1
openssl
pkcs12 -export –in keys/client1.crt -inkey keys/client1.key -out keys/client1.pfx
這兩句了。
3.如果你已經出現過一次錯誤,最好重新來一遍。
init-cong
vars什麼的。
《解決方案》
原來win+apache實現ssl的證書認證如此簡單
謝謝你:)
我的系統是Win2K;
試了一下直接的方法,還是提示我找不到*.old文件;
重來也。。。偶太笨了:(
《解決方案》
原來win+apache實現ssl的證書認證如此簡單
似乎.old的這個問題無法避免,但只是偶爾出現。應該重新init-config,vars,clear-all,然後按照順序一步步來就又可以了。我自己是在winxp-pro-sp2下使用的。如果出現錯誤,就必須重新開始,因為一些文件已經變化了。
再重新來多試幾遍。不行就重啟一下機器。
我也沒有什麼能解決的好方法,難道是操作系統的問題?