JDK自帶工具keytool生成ssl證書
JDK 自帶工具keytool 生成ssl 證書前言:因為公司項目客戶要求使用HTTPS 的方式來保證數(shù)據(jù)的安全,所以木有辦法研究了下怎么生成ssl 證書來使用https 以保證數(shù)據(jù)安全。百度了不少資
JDK 自帶工具keytool 生成ssl 證書
前言:
因為公司項目客戶要求使用HTTPS 的方式來保證數(shù)據(jù)的安全,所以木有辦法研究了下怎么生成ssl 證書來使用https 以保證數(shù)據(jù)安全。
百度了不少資料,看到JAVA 的JDK 自帶生成SSL 證書的工具:keytool ,外加看了同事的心得體會,自己總結(jié)了一下具體的使用方法和使用過程中發(fā)現(xiàn)的問題及解決辦法。
1:什么是HTTPS ?
HTTPS 其實是有兩部分組成:HTTP SSL / TLS,
也就是在HTTP 上又加了一層處理加密信息的模塊,并且會進(jìn)行身份的驗證。 問題:
Firebug 和postman 之類的瀏覽器調(diào)試工具,為什么獲取到的是明文? 解答:
SSL 是對傳輸?shù)臄?shù)據(jù)進(jìn)行加密,針對的是傳輸過程的安全。 firebug 之類的瀏覽器調(diào)試工具,
因為他們得到的是客戶端加密之前/解密之后的數(shù)據(jù),因此是明文的。 2:什么是自簽名證書?
就是自己生成的證書,并不是官方生成的證書。
除非是很正式的項目,否則使用自己簽發(fā)的證書即可,因為官方生成證書是要花錢滴。
3:進(jìn)入正題,使用JDK 自帶工具KeyTool 生成自簽發(fā)證書! 第一步:為服務(wù)器生成證書
打開CMD 命令行工具,cd 到C 盤根目錄或者是jdk 的bin 目錄下,如下圖所示:
,附錄1:常用keytool 命令
使用keytool 命令生成證書:
keytool
-genkey
-alias tomcat(別名)
-keypass 123456(別名密碼)
-keyalg RSA(算法)
-keysize 1024(密鑰長度)
-validity 365(有效期,天單位)
-keystore D:/keys/tomcat.keystore(指定生成證書的位置和證書名稱)
-storepass 123456(獲取keystore 信息的密碼)
方便復(fù)制版:
keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 1024 -validity 365-keystore D:/keys/tomcat.keystore -storepass 123456
圖例:
回車執(zhí)行后如下圖:
點擊回車即可在D:/keys/文件夾內(nèi)生成名為:tomcat.keystore 的文件。
成功后無提示信息
注意:
①D:/keys/ 目錄需要提前手動創(chuàng)建好,否則會生成失敗
②提示輸入域名的時候不能輸入IP 地址
問題①的錯誤信息如下:
第二步:為客戶端生成證書
為瀏覽器生成證書,以便讓服務(wù)器來驗證它。
為了能將證書順利導(dǎo)入至IE 和Firefox ,證書格式應(yīng)該是PKCS12,
因此,使用如下命令生成:
keytool
-genkey
-alias client
-keypass 123456
-keyalg RSA
-storetype PKCS12
-keypass 123456
-storepass 123456
-keystore D:/keys/client.p12
方便復(fù)制版:
keytool -genkey -alias client1 -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -storetype PKCS12 -keystore D:/keys/client1.p12 -storepass 123456
圖例:
第二步余下操作步驟同第一步。
第三步:讓服務(wù)器信任客戶端證書
1、
由于不能直接將PKCS12格式的證書庫導(dǎo)入,
必須先把客戶端證書導(dǎo)出為一個單獨的CER 文件,使用如下命令:
keytool -export -alias client -keystore D:/keys/client.p12 -storetype PKCS12 -keypass 123456 -file D:/keys/client.cer
注意:
Keypass :指定CER 文件的密碼,但會被忽略,而要求重新輸入
2、
將該文件導(dǎo)入到服務(wù)器的證書庫,添加為一個信任證書:
keytool -import -v -file D:/keys/client.cer -keystore D:/keys/tomcat.keystor
e -storepass 123456
圖例:
完成之后通過list 命令查看服務(wù)器的證書庫,
可以看到兩個證書,一個是服務(wù)器證書,一個是受信任的客戶端證書:
keytool -list -v -keystore D:/keys/tomcat.keystore
第四步:讓客戶端信任服務(wù)器證書
1、
由于是雙向SSL 認(rèn)證,客戶端也要驗證服務(wù)器證書,
因此,必須把服務(wù)器證書添加到瀏覽器的“受信任的根證書頒發(fā)機構(gòu)”。
由于不能直接將keystore 格式的證書庫導(dǎo)入,
必須先把服務(wù)器證書導(dǎo)出為一個單獨的CER 文件,使用如下命令:
keytool -keystore D:/keys/tomcat.keystore -export -alias tomcat6 -file D:/keys/server.cer 2、
雙擊server.cer 文件,按照提示安裝證書,
將證書填入到“受信任的根證書頒發(fā)機構(gòu)”。
填入方法:
打開瀏覽器 - 工具 - internet 選項-內(nèi)容- 證書-把中級證書頒發(fā)機構(gòu)里的www.localhost.com(該名稱即時你前面生成證書時填寫的名字與姓氏) 證書導(dǎo)出來-再把導(dǎo)出來的證書導(dǎo)入 受信任的根頒發(fā)機構(gòu) 就OK 了。
第五步:配置Tomcat 服務(wù)器
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:設(shè)置是否雙向驗證,默認(rèn)為false ,設(shè)置為true 代表雙向驗證 keystoreFile:服務(wù)器證書文件路徑 keystorePass:服務(wù)器證書密碼 truststoreFile:用來驗證客戶端證書的根證書,此例中就是服務(wù)器證書 truststorePass:根證書密碼 注意: ① 設(shè)置clientAuth 屬性為True 時,需要手動導(dǎo)入客戶端證書才能訪問。 ② 要訪問https 請求 需要訪問8443端口,訪問http 請求則訪問Tomcat 默認(rèn)端口(你自己設(shè)置的端口,默認(rèn)8080)即可。 總結(jié): 經(jīng)過以上五步,你使用HTTPS 端口為8443 進(jìn)行訪問的時候 就是經(jīng)過SSL 信息加密,不怕被截獲了。 通話的雙方,必須是都擁有證書的端,才能進(jìn)行會話,換句話說,就是只有安裝了咱證書的客戶端,才能與服務(wù)器通信。 小貼士: 強制 https 訪問 在 tomcat /conf/web.xml 中的 后面加上這 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 完成以上步驟后,在瀏覽器中輸入http 的訪問地址也會自動轉(zhuǎn)換為https 了。 附錄1: keytool 常用命令 -alias 產(chǎn)生別名 -keystore 指定密鑰庫的名稱(就像數(shù)據(jù)庫一樣的證書庫,可以有很多個證書,cacerts 這個文件是jre 自帶的, 你也可以使用其它文件名字,如果沒有這個文件名字,它會創(chuàng)建這樣一個) -storepass 指定密鑰庫的密碼 -keypass 指定別名條目的密碼 -list 顯示密鑰庫中的證書信息 -v 顯示密鑰庫中的證書詳細(xì)信息 -export 將別名指定的證書導(dǎo)出到文件 -file 參數(shù)指定導(dǎo)出到文件的文件名 -delete 刪除密鑰庫中某條目 -import 將已簽名數(shù)字證書導(dǎo)入密鑰庫 -keypasswd 修改密鑰庫中指定條目口令 -dname 指定證書擁有者信息 -keyalg 指定密鑰的算法 -validity 指定創(chuàng)建的證書有效期多少天 -keysize 指定密鑰長度 使用說明: 導(dǎo)入一個證書命令可以如下: keytool -import -keystore cacerts -storepass 666666 -keypass 888888 -alias alibabacert -file C:alibabajava?rttest_root.cer 其中-keystore cacerts中的cacerts 是jre 中默認(rèn)的證書庫名字,也可以使用其它名字 -storepass 666666中的666666是這個證書庫的密碼 -keypass 888888中的888888是這個特定證書的密碼 -alias alibabacert中的alibabacert 是你導(dǎo)入證書的別名,在其它操作命令中就可以使用它 -file C:alibabajava?rttest_root.cer中的文件路徑就是要導(dǎo)入證書的路徑 瀏覽證書庫里面的證書信息,可以使用如下命令: keytool -list -v -alias alibabacert -keystore cacerts -storepass 666666 要刪除證書庫里面的某個證書,可以使用如下命令: keytool -delete -alias alibabacert -keystore cacerts -storepass 666666 要導(dǎo)出證書庫里面的某個證書,可以使用如下命令: keytool -export -keystore cacerts -storepass 666666 -alias alibabacert -file F:alibabacert_root.cer 要修改某個證書的密碼(注意:有些數(shù)字認(rèn)證沒有私有密碼,只有公匙,這種情況此命令無效) 這個是交互式的,在輸入命令后,會要求你輸入密碼 keytool -keypasswd -alias alibabacert -keystore cacerts 這個不是交互式的,輸入命令后直接更改 Keytool -keypasswd -alias alibabacert -keypass 888888 -new 123456 -storepass 666666 -keystore cacerts 撰寫日期:2016年02月18日 撰寫人:張之彬