https單向認(rèn)證和雙向認(rèn)證
一、https分為單向認(rèn)證和雙向認(rèn)證:
單向認(rèn)證就是說,只有客戶端使用ssl時(shí)對服務(wù)器端的證書進(jìn)行認(rèn)證,也就是說,客戶端在請求建立之前,服務(wù)器端會向客戶端發(fā)送一個(gè)證書,一般情況下,這種證書都是由自己或企業(yè)自行發(fā)布的,所以在客戶端使用https時(shí),會跳出“是否信任并繼續(xù)”,點(diǎn)擊信任則表示客戶端信任服務(wù)器端證書,才可以繼續(xù)交互。
雙向認(rèn)證,就是服務(wù)器端和客戶端都對雙方的證書進(jìn)行認(rèn)證,這時(shí)除了單向認(rèn)證外,還需要在服務(wù)器端的受信任證書列表中加入客戶端的證書,這樣服務(wù)器端才能信任客戶端的請求。
二、配置:
1.單向認(rèn)證配置:
(1)首先使用keytool生成服務(wù)端密鑰倉庫,命令: keytool -genkey -keyalg RSA -alias tomcatsso -dname "CN=localhost" -keystore d:tomcatsso.keystore -storepass changeit
命令參數(shù)-genkey表示是要生成新的密鑰庫,keyalg表示使用的密鑰生成算法是RSA,alias表示別名,keystore表示生成的密鑰庫存儲在什么地方,文件格式可以自定義,-storepass是表示密鑰庫的密碼。
該步驟生成了一個(gè)密鑰庫,該密鑰庫包含私鑰和公鑰等文件。把它用于服務(wù)器端的證書庫,用于客戶端瀏覽器認(rèn)證服務(wù)端。
(2)開啟tomcat對ssl的支持,具體方法是去掉
(3) 客戶端也要驗(yàn)證服務(wù)器證書,因此,必須把服務(wù)器證書添加到瀏覽的“受信任的根證書頒發(fā)機(jī)構(gòu)”。由于不能直接將keystore格式的證書庫導(dǎo)入,必須先把服務(wù)器證書導(dǎo)出為一個(gè)單獨(dú)的.cer或.crt文件,使用如下命令:
keytool -keystore d:tomcatsso.keystore -export -alias tomcat -file D:hometomcat.cer
然后雙擊D:hometomcat.cer文件,選擇安裝到“受信任的根證書頒發(fā)機(jī)構(gòu)”下面。
如果沒有第三步,瀏覽器會跳出“是否信任并繼續(xù)”,點(diǎn)擊信任則表示客戶端信任服務(wù)器端證書,才可以繼續(xù)交互。
2.雙向認(rèn)證配置:
(1) 為客戶端(即IE或firefox)生成證書庫,以便讓服務(wù)器來驗(yàn)證它。為了能將證書順利導(dǎo)入至IE和Firefox,證書庫格式應(yīng)該是PKCS12,即生成證書的時(shí)候storetype是PKCS12。因此,使用如下命令生成:
keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore D:homeclient.keys
客戶端的CN可以是任意值。
(2)在客戶端安裝證書庫。注意:不能導(dǎo)入.cer或者.crt格式文件,因?yàn)樗鼤堰@些文件當(dāng)做服務(wù)端的認(rèn)證文件,單向認(rèn)證自動安裝。
打開IE->工具->內(nèi)容->證書->個(gè)人->導(dǎo)入->選擇任意文件 D:homeclient.keys ->輸入密鑰。
(3)讓服務(wù)端信任客戶端證書,由于不能直接將PKCS12格式的證書庫導(dǎo)入,必須先把服務(wù)器證書導(dǎo)出為一個(gè)單獨(dú)的.cer或.crt文件,
導(dǎo)出的客戶端證書導(dǎo)入服務(wù)端受信任的證書庫,該命令表示服務(wù)器端信任該證書,命令:keytool -import -alias tomcatsso -file D:homeclient.cer -keystore D:homeclient.trustkeys ,不必先建client.trustkeys庫;
或者導(dǎo)入默認(rèn)的服務(wù)器端信任證書庫,命令:keytool -import -alias tomcatsso -file D:homeclient.cer -keystore "%java_home%/jre/lib/security/cacerts" -storepass changeit
這里的java_home是tomcat使用的jdk的位置,"%java_home%/jre/lib/security/cacerts"的 cacerts是個(gè)無后綴文件,表示服務(wù)器認(rèn)證客戶端時(shí)使用的根證書庫。