NOTE: (xp: %JAVA_HOME%/jre/lib/security/cacerts, linux: $JAVA_HOME/jre/lib/security/cacerts)
驗(yàn)證是否已創(chuàng)建過(guò)同名的證書(shū)
keytool -list -v -alias tomcat -keystore "%JAVA_HOME%/jre/lib/security/cacerts " -storepass changeit
刪除已創(chuàng)建的證書(shū)
keytool -delete -alias tomcat -keystore "%%JAVA_HOME%/jre/lib/security/cacerts " -storepass changeit
Keytool是一個(gè)Java數(shù)據(jù)證書(shū)的管理工具。
keystore
Keytool將密鑰(key)和證書(shū)(certificates)存在一個(gè)稱(chēng)為keystore的文件中
在keystore里,包含兩種數(shù)據(jù): 密鑰實(shí)體(Key entity)——密鑰(secret key)又或者是私鑰和配對(duì)公鑰(采用非對(duì)稱(chēng)加密)
可信任的證書(shū)實(shí)體(trusted certificate entries)——只包含公鑰
Alias(別名)
每個(gè)keystore都關(guān)聯(lián)這一個(gè)獨(dú)一無(wú)二的alias,這個(gè)alias通常不區(qū)分大小寫(xiě)
keystore的存儲(chǔ)位置
在沒(méi)有制定生成位置的情況下,keystore會(huì)存在與用戶(hù)的系統(tǒng)默認(rèn)目錄,
如:對(duì)于window xp系統(tǒng),會(huì)生成在系統(tǒng)的C:\Documents and Settings\UserName\
文件名為“.keystore”
keystore的生成
keytool -genkey -alias tomcat -keyalg RSA
-keystore d:\mykeystore -dname "CN=localhost, OU=localhost,
O=localhost, L=SH, ST=SH, C=CN" -keypass changeit -storepass -validity
180
參數(shù)說(shuō)明:
-genkey表示要?jiǎng)?chuàng)建一個(gè)新的密鑰
-dname表示密鑰的Distinguished Names,
CN=commonName
OU=organizationUnit
O=organizationName
L=localityName
S=stateName
C=country
Distinguished Names表明了密鑰的發(fā)行者身份
-keyalg使用加密的算法,這里是RSA
-alias密鑰的別名
-keypass私有密鑰的密碼,這里設(shè)置為changeit
-keystore 密鑰保存在D:盤(pán)目錄下的mykeystore文件中
-storepass 存取密碼,這里設(shè)置為changeit,這個(gè)密碼提供系統(tǒng)從mykeystore文件中將信息取出
-validity該密鑰的有效期為 180天 (默認(rèn)為90天)
cacerts證書(shū)文件(The cacerts Certificates File)
該證書(shū)文件存在于java.home\jre\lib\security目錄下,是Java系統(tǒng)的CA證書(shū)倉(cāng)庫(kù)
創(chuàng)建證書(shū)
1.服務(wù)器中生成證書(shū):(注:生成證書(shū)時(shí),CN要和服務(wù)器的域名相同,如果在本地測(cè)試,則使用localhost)
keytool -genkey -alias tomcat -keyalg RSA -keystore d:\mykeystore
-dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN"
-keypass changeit -storepass changeit
2.導(dǎo)出證書(shū),由客戶(hù)端安裝:
keytool -export -alias tomcat -keystore d:\mykeystore -file d:\mycerts.cer -storepass changeit
3.客戶(hù)端配置:為客戶(hù)端的JVM導(dǎo)入密鑰(將服務(wù)器下發(fā)的證書(shū)導(dǎo)入到JVM中)
keytool -import -trustcacerts -alias tomcat -keystore
"%JAVA_HOME%/jre/lib/security/cacerts " -file d:\mycerts.cer -storepass
changeit
生成的證書(shū)可以交付客戶(hù)端用戶(hù)使用,用以進(jìn)行SSL通訊,或者伴隨電子簽名的jar包進(jìn)行發(fā)布者的身份認(rèn)證。
常出現(xiàn)的異常:“未找到可信任的證書(shū)”--主要原因?yàn)樵诳蛻?hù)端未將服務(wù)器下發(fā)的證書(shū)導(dǎo)入到JVM中,可以用
keytool -list -alias tomcat -keystore "%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS" -storepass changeit
linux: #keytool -list -alias tomcat -keystore "$JAVA_HOME/jre/lib/security/cacerts" -storepass changeit
來(lái)查看證書(shū)是否真的導(dǎo)入到JVM中。
keytool生成根證書(shū)時(shí)出現(xiàn)如下錯(cuò)誤:
keytool錯(cuò)誤:java.io.IOException:keystore was tampered with,or password was incorrect
原因是在你的home目錄下是否還有.keystore存在。如果存在那么把他刪除掉,然后再執(zhí)行
或者刪除"%JAVA_HOME%/jre/lib/security/cacerts 再執(zhí)行
keytool 用法:
-certreq [-v] [-protected]
[-alias <別名>] [-sigalg <sigalg>]
[-file <csr_file>] [-keypass <密鑰庫(kù)口令>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-changealias [-v] [-protected] -alias <別名> -destalias <目標(biāo)別名>
[-keypass <密鑰庫(kù)口令>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-delete [-v] [-protected] -alias <別名>
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-exportcert [-v] [-rfc] [-protected]
[-alias <別名>] [-file <認(rèn)證文件>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-genkeypair [-v] [-protected]
[-alias <別名>]
[-keyalg <keyalg>] [-keysize <密鑰大小>]
[-sigalg <sigalg>] [-dname <dname>]
[-validity <valDays>] [-keypass <密鑰庫(kù)口令>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-genseckey [-v] [-protected]
[-alias <別名>] [-keypass <密鑰庫(kù)口令>]
[-keyalg <keyalg>] [-keysize <密鑰大小>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-importcert [-v] [-noprompt] [-trustcacerts] [-protected]
[-alias <別名>]
[-file <認(rèn)證文件>] [-keypass <密鑰庫(kù)口令>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-importkeystore [-v]
[-srckeystore <源密鑰庫(kù)>] [-destkeystore <目標(biāo)密鑰庫(kù)>]
[-srcstoretype <源存儲(chǔ)類(lèi)型>] [-deststoretype <目標(biāo)存儲(chǔ)類(lèi)型>]
[-srcstorepass <源存儲(chǔ)庫(kù)口令>] [-deststorepass <目標(biāo)存儲(chǔ)庫(kù)口令>]
[-srcprotected] [-destprotected]
[-srcprovidername <源提供方名稱(chēng)>]
[-destprovidername <目標(biāo)提供方名稱(chēng)>]
[-srcalias <源別名> [-destalias <目標(biāo)別名>]
[-srckeypass <源密鑰庫(kù)口令>] [-destkeypass <目標(biāo)密鑰庫(kù)口令>]]
[-noprompt]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-keypasswd [-v] [-alias <別名>]
[-keypass <舊密鑰庫(kù)口令>] [-new <新密鑰庫(kù)口令>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-list [-v | -rfc] [-protected]
[-alias <別名>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-printcert [-v] [-file <認(rèn)證文件>]
-storepasswd [-v] [-new <新存儲(chǔ)庫(kù)口令>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]