深入了解ApusicAS伺服器配置系列之——SSL配置

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


深入了解ApusicAS伺服器配置系列之——SSL配置

深入了解ApusicAS伺服器配置系列之——SSL配置


近日,隨著鐵路客服中心網上購票系統中逐步可以購買大部分車次的列車,12306網站的種種問題便暴露出來,估計現在信息中心及系統開發商正在緊鑼密鼓關注系統運行狀態,並絞盡腦汁查找一切可以優化的地方進行優化,來滿足數量驚人的火車票訂票需求。先撇開性能問題不談,使用過12306的朋友可能都注意到了,在使用12306進行網上購票之前,需要下載一個根證書到本地,然後,按照相關文件的說明,將證書導入IE瀏覽器,才能正常執行購票等操作。這個證書其實跟SSL/TLS有密切關係。本文介紹下在ApusicAS下如何配置SSL,使AAS支持基於SSL的雙向認證。

SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS)是為網路通信提供安全及數據完整性的一種安全協議。TLS與SSL在傳輸層對網路連接進行加密。為了在不安全的網路上安全保密的傳輸關鍵信息,Netscape公司開發了SSL協議,後來IETF(Internet Engineering Task Force)把它標準化了,並且取名為TLS,目前TLS的版本為1.0,TLS1.0的完整版本請參考rfc2246(www.ietf.org)。基於TLS協議的通信雙方的應用數據是經過加密後傳輸的,應用數據的加密採用了對稱密鑰加密方式,通信雙方通過TLS握手協議來獲得對稱密鑰。為了不讓攻擊者偷聽、篡改或者偽造消息,通信的雙方需要互相認證,來確認對方確實是他所聲稱的主體。TLS握手協議通過互相發送證書來認證對方,一般來說只需要單向認證,即客戶端能確認伺服器便可。但是對於對安全性要求很高的應用往往需要雙向認證,以獲得更高的安全性。下面詳細講述建立自己的認證機構,並且利用它來頒發伺服器證書和客戶端個人證書,然後配置伺服器來使用雙向認證。關於SSL與TLS的更加詳細的信息,請參考相關專業資料。


Apusic應用伺服器完全支持SSL協議SSL3.0和TLS1.0協議。

在進行雙向安全傳輸之前,首先,建立自己的認證授權機構CA,用戶可以向可信的第三方認證機構(CA)申請證書,也可以自己做CA,由自己來頒發證書。(本文末尾將會介紹如何使用openSSL來生成CA證書的操作步驟)


其次,生成伺服器端證書。伺服器端證書用來向客戶端證明伺服器的身份,也就是說在SSL協議握手的時候,伺服器發給客戶端的證書。生成伺服器證書使用JDK的密鑰管理工具Keytool,本文採用的jdk是Oracle jdk1.5.0。


建立工作目錄。
view plaincopyprint?cd ..   
mkdir server   
cd server  
cd ..
mkdir server
cd server

生成伺服器私鑰對及自簽名證書,並且保存在密鑰庫mykeystore中。 view plaincopyprint?keytool -genkey -alias myserver -keyalg RSA -keysize 1024 –keypass keypass -storepass keypass -dname "cn=localhost, ou=dev, o=apusic, l=Shenzhen, st=guangdong, c=CN" -keystore mykeystore  
keytool -genkey -alias myserver -keyalg RSA -keysize 1024 –keypass keypass -storepass keypass -dname "cn=localhost, ou=dev, o=apusic, l=Shenzhen, st=guangdong, c=CN" -keystore mykeystore
生成伺服器待簽名證書。 view plaincopyprint?keytool -certreq -alias myserver -sigalg SHA1withRSA -file server.csr -keypass keypass -storepass keypass -keystore mykeystore  
keytool -certreq -alias myserver -sigalg SHA1withRSA -file server.csr -keypass keypass -storepass keypass -keystore mykeystore
請求CA簽名伺服器待簽名證書,得到經CA簽名的伺服器證書。 view plaincopyprint?openssl x509 -req -in server.csr -out server-cert.cer -CA ..\ca\ca-cert.cer -CAkey ..\ca\dsakey -days 365 -set_serial 02  
openssl x509 -req -in server.csr -out server-cert.cer -CA ..\ca\ca-cert.cer -CAkey ..\ca\dsakey -days 365 -set_serial 02
把CA根證書導入密鑰庫mykeystore。 view plaincopyprint?keytool -import -alias caroot -file ..\ca\ca-cert.cer -noprompt -keypass keypass -storepass keypass -keystore mykeystore  
keytool -import -alias caroot -file ..\ca\ca-cert.cer -noprompt -keypass keypass -storepass keypass -keystore mykeystore
把經過CA簽名的伺服器證書導入密鑰庫mykeystore。 view plaincopyprint?keytool -import -alias myserver -file server-cert.cer -noprompt -keypass keypass -storepass keypass -keystore mykeystore  
keytool -import -alias myserver -file server-cert.cer -noprompt -keypass keypass -storepass keypass -keystore mykeystore
接下來,頒發併發布個人證書。個人證書用來向伺服器證明個人的身份,也就是說在SSL協議握手的時候,客戶端發給伺服器端的證書。同時個人證書中包含個人信息如用戶名等,如果需要,這個用戶名將作為登錄伺服器的用戶名。

建立工作目錄。 view plaincopyprint?cd ..   
mkdir client   
cd client  
cd ..
mkdir client
cd client
生成客戶端私鑰。 view plaincopyprint?openssl genrsa -out clientkey 1024  
openssl genrsa -out clientkey 1024
生成客戶端待簽名證書。 view plaincopyprint?openssl req -new -out client.csr -key clientkey  
openssl req -new -out client.csr -key clientkey
請求CA簽名客戶端待簽名證書,得到經CA簽名的客戶端證書。 view plaincopyprint?openssl x509 -req -in client.csr -out client.cer -CA ..\ca\ca-cert.cer -CAkey ..\ca\dsakey -days 365 -set_serial 02  
openssl x509 -req -in client.csr -out client.cer -CA ..\ca\ca-cert.cer -CAkey ..\ca\dsakey -days 365 -set_serial 02
生成客戶端的個人證書client.p12。 view plaincopyprint?openssl pkcs12 -export -clcerts -in client.cer -inkey clientkey -out client.p12  
openssl pkcs12 -export -clcerts -in client.cer -inkey clientkey -out client.p12
CA根證書導入客戶端。

在這裡CA的根證書用來在SSL握手時驗證伺服器發給客戶端瀏覽器的證書。如果沒有此證書,瀏覽器將無法自動驗證伺服器證書,因此瀏覽器將彈出確認信息,讓用戶來確認是否信任伺服器證書。在客戶端的IE中使用"工具-> Internet選項-> 內容-> 證書-> 導入"把我們生成的CA根證書ca\ca-cert.cer導入,使其成為用戶信任的CA。

客戶端個人證書導入客戶端: 在客戶端的IE中使用"工具-> Internet選項-> 內容-> 證書-> 導入"把我們生成的CA根證書client.p12導入,使其成為用戶信任的CA。


然後,配置伺服器允許雙向認證。

為了保證AAS的通用性,Apusic應用伺服器出廠默認配置下不支持雙向認證,要支持SSL雙向認證,需要對配置作如下修改:

修改Muxer服務:如果採用密鑰庫文件的方式,示例配置如下: view plaincopyprint?   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  














如果採用證書文件的方式,示例配置如下: view plaincopyprint?   
  
   
   
   
   
   
   
   
   
   
   
   
  












最後,測試雙向認證。
訪問應用,如果前面的操作都正確的話,應該可以看到Apusic的歡迎頁面。同時狀態欄上的小鎖處於閉合狀態,且證書為有效狀態,表示您已經成功地與伺服器建立了要求客戶端驗證的SSL安全連接。


附:使用OpenSSL生成CA證書。

本文所使用的CA軟體為Openssl。Openssl用來產生CA證書、證書籤名並生成瀏覽器可導入的PKCS#12格式個人證書。你可以在Openssl的官方網站http://www.openssl.org下載最新版的Openssl,本文使用的是Openssl 0.9.7d。從Openssl的官方網站下載並安裝了Openssl之後,設置系統環境變數Path指向Openssl的bin目錄,下面開始創建CA根證書:

建立工作目錄。 view plaincopyprint?mkdir ca   
cd ca  
mkdir ca
cd ca
生成ca私鑰。 view plaincopyprint?openssl dsaparam -out dsaparam 1024 openssl gendsa -out dsakey dsaparam  
openssl dsaparam -out dsaparam 1024 openssl gendsa -out dsakey dsaparam
生成ca待簽名證書。 view plaincopyprint?openssl req -new -out ca-req.csr -key dsakey  
openssl req -new -out ca-req.csr -key dsakey
用CA私鑰進行自簽名,得到自簽名的CA根證書。 view plaincopyprint?openssl x509 -req -in ca-req.csr -out ca-cert.cer -signkey dsakey –days  
《解決方案》

謝謝分享
《解決方案》

看得好暈啊 :mrgreen:



[火星人 via ] 深入了解ApusicAS伺服器配置系列之——SSL配置已經有96次圍觀

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