前言:
因為公司項目客戶要求使用HTTPS的方式來保證數(shù)據(jù)的安全,所以木有辦法研究了下怎么生成ssl證書來使用https以保證數(shù)據(jù)安全。
百度了不少資料尸疆,看到JAVA的JDK自帶生成SSL證書的工具:keytool,外加看了同事的心得體會,自己總結了一下具體的使用方法和使用過程中發(fā)現(xiàn)的問題及解決辦法志衍。
HTTPS其實是有兩部分組成:HTTP?+?SSL?/?TLS聊替,
也就是在HTTP上又加了一層處理加密信息的模塊楼肪,并且會進行身份的驗證。
問題:
Firebug和postman之類的瀏覽器調試工具惹悄,為什么獲取到的是明文春叫?
解答:
SSL是對傳輸?shù)臄?shù)據(jù)進行加密,針對的是傳輸過程的安全。?
firebug之類的瀏覽器調試工具象缀,
因為他們得到的是客戶端加密之前/解密之后的數(shù)據(jù)蔬将,因此是明文的。
就是自己生成的證書霞怀,并不是官方生成的證書。
除非是很正式的項目莉给,否則使用自己簽發(fā)的證書即可毙石,因為官方生成證書是要花錢滴。
3:進入正題颓遏,使用JDK自帶工具KeyTool?生成自簽發(fā)證書徐矩!
打開CMD命令行工具,cd到C盤根目錄或者是jdk的bin目錄下叁幢,如下圖所示:
使用keytool命令生成證書:
keytool?
-genkey?
-alias?tomcat(別名)?
-keypass?123456(別名密碼)?
-keyalg?RSA(算法)?
-keysize?1024(密鑰長度)?
-validity?365(有效期滤灯,天單位)?
-keystore?D:/keys/tomcat.keystore(指定生成證書的位置和證書名稱)?
-storepass?123456(獲取keystore信息的密碼)
方便復制版:
keytool?-genkey?-alias?tomcat?-keypass?123456?-keyalg?RSA?-keysize?1024?-validity?365?-keystore?D:/keys/tomcat.keystore?-storepass?123456
圖例:
回車執(zhí)行后如下圖:
點擊回車即可在D:/keys/文件夾內生成名為:tomcat.keystore的文件。
成功后無提示信息
注意:
①D:/keys/?目錄需要提前手動創(chuàng)建好曼玩,否則會生成失敗
②提示輸入域名的時候不能輸入IP地址
問題①的錯誤信息如下:
為瀏覽器生成證書鳞骤,以便讓服務器來驗證它。
為了能將證書順利導入至IE和Firefox黍判,證書格式應該是PKCS12豫尽,
因此,使用如下命令生成:
keytool?
-genkey?
-alias?client?
-keypass?123456
-keyalg?RSA?
-storetype?PKCS12?
-keypass?123456?
-storepass?123456?
-keystore?D:/keys/client.p12
方便復制版:
keytool?-genkey?-alias?client1?-keypass?123456?-keyalg?RSA?-keysize?1024?-validity?365?-storetype?PKCS12?-keystore?D:/keys/client1.p12?-storepass?123456
圖例:
第二步余下操作步驟同第一步顷帖。
1美旧、
由于不能直接將PKCS12格式的證書庫導入,
必須先把客戶端證書導出為一個單獨的CER文件贬墩,使用如下命令:
keytool?-export?-alias?client?-keystore?D:/keys/client.p12?-storetype?PKCS12?-keypass?123456?-file?D:/keys/client.cer
注意:
Keypass:指定CER文件的密碼榴嗅,但會被忽略,而要求重新輸入
2震糖、
將該文件導入到服務器的證書庫录肯,添加為一個信任證書:
keytool?-import?-v?-file?D:/keys/client.cer?-keystore?D:/keys/tomcat.keystor
e?-storepass?123456
圖例:
完成之后通過list命令查看服務器的證書庫,
可以看到兩個證書吊说,一個是服務器證書论咏,一個是受信任的客戶端證書:
keytool?-list?-v?-keystore?D:/keys/tomcat.keystore
1、
由于是雙向SSL認證颁井,客戶端也要驗證服務器證書厅贪,
因此,必須把服務器證書添加到瀏覽器的“受信任的根證書頒發(fā)機構”雅宾。
由于不能直接將keystore格式的證書庫導入养涮,
必須先把服務器證書導出為一個單獨的CER文件,使用如下命令:
keytool?-keystore?D:/keys/tomcat.keystore?-export?-alias?tomcat6?-file?D:/keys/server.cer
2、
雙擊server.cer文件贯吓,按照提示安裝證書懈凹,
將證書填入到“受信任的根證書頒發(fā)機構”。
填入方法:
打開瀏覽器???-?工具??-??internet選項-內容-?證書-把中級證書頒發(fā)機構里的www.localhost.com(該名稱即時你前面生成證書時填寫的名字與姓氏)證書導出來-再把導出來的證書導入??受信任的根頒發(fā)機構??就OK了悄谐。
<Connector? port=”8443”
protocol=”org.apache.coyote.http11.Http11NioProtocol”?SSLEnabled=”true”
maxThreads=”150”
scheme=”https”
secure=”true”
clientAuth=”true”
sslProtocol=”TLS”
keystoreFile=”D:/keys/tomcat.keystore”
keystorePass=”123456”
truststoreFile=”D:/keys/tomcat.keystore”
truststorePass=”123456”?/>
屬性說明:
clientAuth:設置是否雙向驗證介评,默認為false,設置為true代表雙向驗證
keystoreFile:服務器證書文件路徑
keystorePass:服務器證書密碼
truststoreFile:用來驗證客戶端證書的根證書爬舰,此例中就是服務器證書
truststorePass:根證書密碼
注意:
①?設置clientAuth屬性為True時们陆,需要手動導入客戶端證書才能訪問。
②?要訪問https請求?需要訪問8443端口情屹,訪問http請求則訪問Tomcat默認端口(你自己設置的端口坪仇,默認8080)即可。
經過以上五步垃你,你使用HTTPS?端口為8443?進行訪問的時候?就是經過SSL信息加密椅文,不怕被截獲了。
通話的雙方蜡镶,必須是都擁有證書的端雾袱,才能進行會話恤筛,換句話說官还,就是只有安裝了咱證書的客戶端,才能與服務器通信毒坛。
小貼士:
強制?https?訪問
在?tomcat?/conf/web.xml?中的?</welcome-?file-list>?后面加上這
<login-config>????
<!–?Authorization?setting?for?SSL?–>????
<auth-method>CLIENT-CERT</auth-method>????
<realm-name>Client?Cert?Users-only?Area</realm-name>????
</login-config>????
<security-constraint>????
<!–?Authorization?setting?for?SSL?–>????
<web-resource-collection?>????
<web-resource-name?>SSL</web-resource-name>????
<url-pattern>/*</url-pattern>????
</web-resource-collection>????
<user-data-constraint>????
<transport-guarantee>CONFIDENTIAL</transport-guarantee>????
</user-data-constraint>????
</security-constraint>?
完成以上步驟后望伦,在瀏覽器中輸入http的訪問地址也會自動轉換為https了。