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