1:什么是HTTPS丽焊?
HTTPS其實(shí)是有兩部分組成:HTTP?+?SSL?/?TLS,
也就是在HTTP上又加了一層處理加密信息的模塊咕别,并且會(huì)進(jìn)行身份的驗(yàn)證技健。
2:什么是自簽名證書?
就是自己生成的證書惰拱,并不是官方生成的證書雌贱。
除非是很正式的項(xiàng)目,否則使用自己簽發(fā)的證書即可偿短,因?yàn)楣俜缴勺C書是要花錢滴欣孤。
3:進(jìn)入正題,使用JDK自帶工具KeyTool?生成自簽發(fā)證書昔逗!
第一步:為服務(wù)器生成證書
命令:
keytool
-genkey
-alias?tomcat(別名)
-keypass?123456(別名密碼)
-keyalg?RSA(算法)
-keysize?1024(密鑰長(zhǎng)度)
-validity?3650(有效期降传,天單位)
-keystore tomcat.keystore(指定生成證書的位置和證書名稱)
-storepass?123456(獲取keystore信息的密碼)
方便復(fù)制版:
keytool?-genkey?-alias?tomcat?-keypass?123456?-keyalg?RSA?-keysize?1024?-validity?3650 -keystore?D:/keys/tomcat.keystore?-storepass?123456
回車執(zhí)行后如下圖:
點(diǎn)擊回車即生成名為:tomcat.keystore的文件。
注意:
What is your first and last name? ?建議填域名
第二步:為客戶端生成證書
為瀏覽器生成證書勾怒,以便讓服務(wù)器來(lái)驗(yàn)證它婆排。
為了能將證書順利導(dǎo)入至IE和Firefox,證書格式應(yīng)該是PKCS12笔链,
因此段只,使用如下命令生成:
keytool
-genkey
-alias?client
-keypass?123456
-keyalg?RSA
-storetype?PKCS12
-keypass?123456
-storepass?123456
-keystore client.p12
方便復(fù)制版:
keytool?-genkey?-alias?client -keypass?123456?-keyalg?RSA?-keysize?1024?-validity?365?-storetype?PKCS12?-keystore client.p12?-storepass?123456
第二步余下操作步驟同第一步。
第三步:讓服務(wù)器信任客戶端證書
1鉴扫、
由于不能直接將PKCS12格式的證書庫(kù)導(dǎo)入赞枕,
必須先把客戶端證書導(dǎo)出為一個(gè)單獨(dú)的CER文件,使用如下命令:
keytool?-export?-alias?client?-keystore client.p12?-storetype?PKCS12?-keypass?123456?-file client.cer
注意:
Keypass:指定CER文件的密碼,但會(huì)被忽略鹦赎,而要求重新輸入
2谍椅、
將該文件導(dǎo)入到服務(wù)器的證書庫(kù),添加為一個(gè)信任證書:
keytool?-import?-v?-file?D:/keys/client.cer?-keystore?D:/keys/tomcat.keystor
e?-storepass?123456
圖例:
完成之后通過(guò) list參數(shù) 查看服務(wù)器的證書庫(kù)古话,
可以看到兩個(gè)證書,一個(gè)是服務(wù)器證書锁施,一個(gè)是受信任的客戶端證書:
keytool?-list?-v?-keystore tomcat.keystore
第四步:讓客戶端信任服務(wù)器證書
1陪踩、
由于是雙向SSL認(rèn)證,客戶端也要驗(yàn)證服務(wù)器證書悉抵,
因此肩狂,必須把服務(wù)器證書添加到瀏覽器的“受信任的根證書頒發(fā)機(jī)構(gòu)”。
由于不能直接將keystore格式的證書庫(kù)導(dǎo)入姥饰,
必須先把服務(wù)器證書導(dǎo)出為一個(gè)單獨(dú)的CER文件傻谁,使用如下命令:
keytool?-keystore tomcat.keystore?-export?-alias?tomcat -file server.cer
2、
雙擊server.cer文件列粪,按照提示安裝證書审磁,
將證書填入到“受信任的根證書頒發(fā)機(jī)構(gòu)”。
填入方法:
打開瀏覽器???-?工具??-??internet選項(xiàng)-內(nèi)容-?證書-把中級(jí)證書頒發(fā)機(jī)構(gòu)里的www.localhost.com(該名稱即時(shí)你前面生成證書時(shí)填寫的名字與姓氏)證書導(dǎo)出來(lái)-再把導(dǎo)出來(lái)的證書導(dǎo)入??受信任的根頒發(fā)機(jī)構(gòu)??就OK了岂座。
第五步:配置Tomcat服務(wù)器
<Connector port="7443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" maxThreads="150" scheme="https" chemeecure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="tomcat.keystore" keystorePass="123456" truststoreFile="tomcat.keystore" truststorePass="123456"/>
屬性說(shuō)明:
clientAuth:設(shè)置是否雙向驗(yàn)證态蒂,默認(rèn)為false,設(shè)置為true代表雙向驗(yàn)證
keystoreFile:服務(wù)器證書文件路徑
keystorePass:服務(wù)器證書密碼
truststoreFile:用來(lái)驗(yàn)證客戶端證書的根證書费什,此例中就是服務(wù)器證書
truststorePass:根證書密碼
注意:
①?設(shè)置clientAuth屬性為True時(shí)钾恢,需要手動(dòng)導(dǎo)入客戶端證書才能訪問(wèn)。
②?要訪問(wèn)https請(qǐng)求?需要訪問(wèn)8443端口鸳址,訪問(wèn)http請(qǐng)求則訪問(wèn)Tomcat默認(rèn)端口(你自己設(shè)置的端口瘩蚪,默認(rèn)8080)即可。
總結(jié):
經(jīng)過(guò)以上五步稿黍,你使用HTTPS?端口為8443?進(jìn)行訪問(wèn)的時(shí)候?就是經(jīng)過(guò)SSL信息加密疹瘦,不怕被截獲了。
通話的雙方闻察,必須是都擁有證書的端拱礁,才能進(jìn)行會(huì)話,換句話說(shuō)辕漂,就是只有安裝了咱證書的客戶端呢灶,才能與服務(wù)器通信。
小貼士:
強(qiáng)制 https 訪問(wèn)
在 tomcat /conf/web.xml 中的 ?<welcome- file-list /> 后面加上這
<login-config>
<!-- Authorization setting for SSL -->
<auth-method>CLIENT-CERT
<realm-name>Client Cert Users-only Area
</login-config>
<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection >
<web-resource-name >SSL
<url-pattern>/*
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL
</user-data-constraint>
</security-constraint>
完成以上步驟后钉嘹,在瀏覽器中輸入http的訪問(wèn)地址也會(huì)自動(dòng)轉(zhuǎn)換為https了鸯乃。
附錄1:
keytool常用命令
-alias???????產(chǎn)生別名
-keystore????指定密鑰庫(kù)的名稱(就像數(shù)據(jù)庫(kù)一樣的證書庫(kù),可以有很多個(gè)證書,cacerts這個(gè)文件是jre自帶的缨睡,
你也可以使用其它文件名字鸟悴,如果沒有這個(gè)文件名字,它會(huì)創(chuàng)建這樣一個(gè))
-storepass???指定密鑰庫(kù)的密碼
-keypass?????指定別名條目的密碼
-list????????顯示密鑰庫(kù)中的證書信息
-v???????????顯示密鑰庫(kù)中的證書詳細(xì)信息
-export??????將別名指定的證書導(dǎo)出到文件
-file????????參數(shù)指定導(dǎo)出到文件的文件名
-delete??????刪除密鑰庫(kù)中某條目
-import??????將已簽名數(shù)字證書導(dǎo)入密鑰庫(kù)
-keypasswd???修改密鑰庫(kù)中指定條目口令
-dname???????指定證書擁有者信息
-keyalg??????指定密鑰的算法
-validity????指定創(chuàng)建的證書有效期多少天
-keysize?????指定密鑰長(zhǎng)度
使用說(shuō)明:
導(dǎo)入一個(gè)證書命令可以如下:
keytool?-import?-keystore?cacerts?-storepass?666666?-keypass?888888?-alias?alibabacert?-file?C:\alibabajava\cert\test_root.cer
其中-keystore?cacerts中的cacerts是jre中默認(rèn)的證書庫(kù)名字,也可以使用其它名字
-storepass?666666中的666666是這個(gè)證書庫(kù)的密碼
-keypass?888888中的888888是這個(gè)特定證書的密碼
-alias?alibabacert中的alibabacert是你導(dǎo)入證書的別名,在其它操作命令中就可以使用它
-file?C:\alibabajava\cert\test_root.cer中的文件路徑就是要導(dǎo)入證書的路徑
瀏覽證書庫(kù)里面的證書信息灸蟆,可以使用如下命令:
keytool?-list?-v?-alias?alibabacert?-keystore?cacerts?-storepass?666666
要?jiǎng)h除證書庫(kù)里面的某個(gè)證書檀蹋,可以使用如下命令:
keytool?-delete?-alias?alibabacert?-keystore?cacerts?-storepass?666666
要導(dǎo)出證書庫(kù)里面的某個(gè)證書,可以使用如下命令:
keytool?-export?-keystore?cacerts?-storepass?666666?-alias?alibabacert?-file?F:\alibabacert_root.cer
要修改某個(gè)證書的密碼(注意:有些數(shù)字認(rèn)證沒有私有密碼,只有公匙,這種情況此命令無(wú)效)
這個(gè)是交互式的,在輸入命令后猩系,會(huì)要求你輸入密碼
keytool?-keypasswd?-alias?alibabacert?-keystore?cacerts
這個(gè)不是交互式的,輸入命令后直接更改
Keytool?-keypasswd?-alias?alibabacert?-keypass?888888?-new?123456?-storepass?666666?-keystore?cacerts