痞酷網_PIGOO

 找回密碼
 立即註冊
!!! [系統偵測到廣告阻擋軟體] !!!

如果您覺得痞酷網對您有些許幫助,或者您認同痞酷網的理想,

那麼希望您將痞酷網設定為白名單.

並請在上論壇的時候,動動您的手指,用行動支持我們.

謝謝!
查看: 6751|回復: 0

[Linux]以數位憑證驗證客戶端的身份

[複製鏈接]
發表於 2007-11-23 22:07:59 | 顯示全部樓層 |閱讀模式
我們除了可以使用Server端的數位憑證來進行SSL安全加密通訊以外,也可以使用Client端的數位憑證來驗證Client端的身份,也就是說Client端必需要有我們所認可的憑證才可以存取Web Server上的資料。

實作步驟:
建立自己專屬的CA(Certificate Authority)
建立與簽署不受passphrase保護的Server端數位憑證 
設定apache
建立與簽署client端數位憑證並將其轉換為pkcs12格式
在client端的瀏覽器中將,CA本身的數位憑證匯入至『憑證機構(Root CA)』中
在client端的瀏覽器中匯入『Client端數位憑證』
以apache的URL Rewrite強迫客戶端透過SSL瀏覽特定網頁



一、建立自己專屬的CA(Certificate Authority)
1.刪除原有的CA

引用:
rm -rf /usr/share/ssl/misc/demoCA  


2.修改 /usr/share/ssl/misc/CA 這支Script
<將CA本身的數位憑證使用年限設定為10年>

引用:
找到:DAYS="-days 365"
改成:DAYS="-days 3650"  

<將加密的bit數調整為2048>

引用:
找到:$REQ -new (在 "Making CA certificate" 附近)
改成:$REQ -newkey rsa:2048  

3.建立CA

引用:
cd /usr/share/ssl/misc
./CA -newca  

依照指示輸入相關資訊與passphrase即可,產生出來的 /usr/share/ssl/misc/demoCA即為新的CA。
/usr/share/ssl/misc/demoCA/cacert.pem:CA的數位憑證
/usr/share/ssl/misc/demoCA/private/cakey.pem:CA的private key

4.變更檔案存取權限

引用:
chmod -R go= /usr/share/ssl/misc/demoCA  



二.建立與簽署不受passphrase保護的Server端數位憑證
若是使用 /usr/share/ssl/misc/CA這支Script來建立數位憑證,預設建立出來的憑證是會受到passphrase保護的,若是將有密碼保護的憑證用在apache上,則每次重新啟動apache時系統都會要求你輸入密碼,否則apache會啟動失敗。因此實務上,還是採用不受密碼保護的憑證較多。

1.建立apache專用的private key

引用:
cd /usr/share/ssl/misc
openssl genrsa -out apache.key 2048
chmod 400 apache.key  

2.建立apache的CSR(Certificate-Signing Request)

引用:
openssl req -new -key apache.key -out apache.csr
chmod 400 apache.csr  

注意!在輸入相關資料的時候,Common Name必須要輸入apache server的FQDN,否則客戶端使用瀏覽器連線的時候會出現錯誤訊息。

3.以自己的CA來簽署apache的CSR
先確定是否在 /usr/share/ssl/misc目錄中。


引用:
mv apache.csr newreq.pem
./CA -signreq (會產生newcert.pem)
mv newcert.pem apache.crt
chmod 400 apache.crt
rm -f newreq.pem  

可以使用以下的指令觀察的憑證內容:

引用:
openssl x509 -text -noout -in apache.crt  



三.設定apache
首先要將下列東西複製到指定的位置:
CA的數位憑證複製到 /etc/httpd/conf/ssl.crt/demoCA.crt
apache的數位憑證複製到 /etc/httpd/conf/ssl.crt/apache.crt
apache的private key複製到 /etc/httpd/conf/ssl.key/apache.key

<實際修改設定檔>
vi /etc/httpd/conf.d/ssl.conf

引用:
SSLEngine On
SSLProtocol ALL -SSLv2 (SSLv2是有缺陷的,因此關閉對於SSLv2的支援)
SSLCipherSuite ALL:!EXP:!NULL:!ADH:!LOW (關閉加密強度較低的Cipher)
SSLCACertificateFile /etc/httpd/conf/ssl.crt/demoCA.crt
SSLCertificateFile /etc/httpd/conf/ssl.crt/apache.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/apache.key
SSLVerifyClient require
SSLVerifyDepth 1  



四.建立與簽署client端數位憑證並將其轉換為pkcs12格式
直接使用 /usr/share/ssl/misc/CA這支Script來建立,但要記得先將目前工作目錄切至 /usr/share/ssl/misc。

<建立憑證>

引用:
cd /usr/share/ssl/misc
./CA -newreq (會產生newreq.pem,此為private key + CSR)
./CA -signreq (會產生newcert.pem,此為數位憑證)
chmod 400 newreq.pem newcert.pem  


<將憑證轉換為pkcs12格式>

引用:
openssl pkcs12 -export -name "Client Certificate" -in newcert.pem -inkey newreq.pem -out newcert.p12

chmod 400 newcert.p12
mv newcert.p12 client.p12 <== 此即為配發給客戶端使用的憑證  



五.在client端的瀏覽器中將,CA本身的數位憑證匯入至『憑證機構(Root CA)』中
以 IE 為例:
工具->網際網路選項->內容->憑證->信任的根憑證授權->匯入 client.p12


六、在client端的瀏覽器中匯入『Client端數位憑證』
以 IE 為例:
工具->網際網路選項->內容->憑證->個人->匯入 client.p12


七、以apache的URL Rewrite強迫客戶端透過SSL瀏覽特定網頁
例如限制 /var/www/html/secure 這個資料夾一定要使用SSL瀏覽:

PHP 程式碼:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/secure(.*) https://%{SERVER_NAME}/secure$1 [R,L]
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

關閉

站長小叮嚀上一條 /1 下一條

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

GMT+8, 2024-11-21 08:58 PM , Processed in 0.126787 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.