?一、https分為單向認證和雙向認證:
單向認證就是說,只有客戶端使用ssl時對服務器端的證書進行認證,也就是說,客戶端在請求建立之前,服務器端會向客戶端發送一個證書,一般情況下,這種證書都是由自己或企業自行發布的,所以在客戶端使用https時,會跳出“是否信任并繼續”,點擊信任則表示客戶端信任服務器端證書,才可以繼續交互。
雙向認證,就是服務器端和客戶端都對雙方的證書進行認證,這時除了單向認證外,還需要在服務器端的受信任證書列表中加入客戶端的證書,這樣服務器端才能信任客戶端的請求。
二、配置:
1.單向認證配置:
?(1)首先使用keytool生成服務端密鑰倉庫,命令:?keytool -genkey -keyalg RSA -alias tomcatsso -dname "CN=localhost" -keystore d:\tomcatsso.keystore -storepass changeit
? ?命令參數-genkey表示是要生成新的密鑰庫,keyalg表示使用的密鑰生成算法是RSA,alias表示別名,keystore表示生成的密鑰庫存儲在什么地方,文件格式可以自定義,-storepass是表示密鑰庫的密碼。
該步驟生成了一個密鑰庫,該密鑰庫包含私鑰和公鑰等文件。 把它用于服務器端的證書庫,用于客戶端瀏覽器認證服務端。
(2)開啟tomcat對ssl的支持,具體方法是去掉 <Connector port="8443"...>這一段的注釋,并在本段的末尾加上keystoreFile="d:\tomcatsso.keystore" keystorePass="changeit"這兩個屬性,這兩個屬性會告訴tomcat去哪兒尋找服務器端密鑰庫。重啟tomcat,至此tomcat對https的修改完成。
?(3) 客戶端也要驗證服務器證書,因此,必須把服務器證書添加到瀏覽的“受信任的根證書頒發機構”。由于不能直接將keystore格式的證書庫導入,必須先把服務器證書導出為一個單獨的.cer或.crt文件,使用如下命令:?
? ? ? keytool -keystore d:\tomcatsso.keystore?-export -alias tomcat -file D:\home\tomcat.cer
然后雙擊D:\home\tomcat.cer文件,選擇安裝到“受信任的根證書頒發機構”下面。
? ? ?如果沒有第三步,瀏覽器會跳出“是否信任并繼續”,點擊信任則表示客戶端信任服務器端證書,才可以繼續交互。 消除該項請使用OPenSSL申請一個正式的服務器證書,參考 http://blog.csdn.net/jasonhwang/article/details/2344768
?2.雙向認證配置:
?(1)?為客戶端(即IE或firefox)生成證書庫,以便讓服務器來驗證它。為了能將證書順利導入至IE和Firefox,證書庫格式應該是PKCS12,即生成證書的時候storetype是PKCS12。 因此,使用如下命令生成:
? ? ? ? keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore D:\home\client.keys?
? ? ? ?客戶端的CN可以是任意值。
(2)在客戶端安裝證書庫。注意:不能導入.cer或者.crt格式文件,因為它會把這些文件當做服務端的認證文件,單向認證自動安裝。
?打開IE->工具->內容->證書->個人->導入->選擇任意文件?D:\home\client.keys ->輸入密鑰。一定要存在個人區。可以參考《
http://www.linuxyw.com/a/WEBfuwu/20130530/516.html
》
(3)讓服務端信任客戶端證書,由于不能直接將PKCS12格式的證書庫導入,必須先把服務器證書導出為一個單獨的.cer或.crt文件,
? ? ? ? 導出的客戶端證書導入服務端受信任的證書庫,該命令表示服務器端信任該證書,命令:keytool -import -alias tomcatsso -file?D:\home\client.cer?-keystore?D:\home\client.trustkeys ,不必先建client.trustkeys庫;
? ? ? ? 或者導入默認的服務器端信任證書庫,命令:keytool -import -alias tomcatsso -file D:\home\client.cer?-keystore "%java_home%/jre/lib/security/cacerts" -storepass changeit
這里的java_home是tomcat使用的jdk的位置,"%java_home%/jre/lib/security/cacerts"的?cacerts是個無后綴文件,表示服務器認證客戶端時使用的根證書庫。?
?
參考文章:《keytool命令使用實例》? http://www.360doc.com/content/10/0121/10/633992_14065815.shtml
? ? ? ? ? ? ? ? 《使用key配置https》 ? ? http://www.blogjava.net/stevenjohn/archive/2012/08/22/385989.html
?
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
