原來win+apache實現ssl的證書認證如此簡單

火星人 @ 2014-03-04 , reply:0


原來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下使用的。如果出現錯誤,就必須重新開始,因為一些文件已經變化了。
再重新來多試幾遍。不行就重啟一下機器。
我也沒有什麼能解決的好方法,難道是操作系統的問題?




[火星人 via ] 原來win+apache實現ssl的證書認證如此簡單已經有226次圍觀

http://www.coctec.com/docs/service/show-post-12292.html