一. Keytool簡單介紹
1.Keytool是一個Java數據證書的管理工具。
Keytool將密鑰(key)和證書(certificates)存在一個稱爲keystore的文件中java
2.在keystore裏,包含兩種數據:
密鑰實體(Key entity)——密鑰(secret key)又或者是私鑰和配對公鑰(採用非對稱加密)
可信任的證書實體(trusted certificate entries)——只包含公鑰算法
3.Alias(別名)
每一個keystore都關聯這一個獨一無二的alias,這個alias一般不區分大小寫瀏覽器
4.keystore的存儲位置
在沒有制定生成位置的狀況下,keystore會存在與用戶的系統默認目錄,
如:對於window xp系統,會生成在系統的C:\Documents and Settings\UserName\
文件名爲「.keystore」tomcat
二. keystore的生成
keytool -genkey -dname "cn=programmer, ou=JavaSoft, o=Sun, c=US" -keyalg RSA -keysize 1024 -alias tomcat -keypass 123456 -keystore C:\server.keystore -storepass 123456 -validity 3600 keytool -genkey -keyalg RSA -keysize 1024 -alias tomcat -keypass changeit -keystore server.keystore -storepass changeit -validity 3600
參數說明:
-genkey 表示要建立一個新的密鑰
-dname 表示密鑰的Distinguished Names(用於代表密鑰的發行者身份)
CN=commonName (普通名稱)
OU=organizationUnit (組織單元)
O=organizationName (組織名稱)
L=localityName (地點)
S=stateName (州名)
C=country (國家名)
-keyalg 使用加密的算法,這裏是RSA
-alias 密鑰的別名
-keypass 私有密鑰的密碼,這裏設置爲123456
-keystore 密鑰保存在C:\下的.jks文件中
-storepass 存取密碼,這裏設置爲123456,這個密碼提供系統從.keystore文件中將信息取出,keystore密碼
-validity 該密鑰的有效期爲 3600天服務器
-storetype 證書格式PKCS12dom
三. 配置Tomcat服務器
打開Tomcat根目錄下的/conf/server.xml工具
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="${catalina.base}\keystore\server.keystore" keystorePass="123456" />
四. 測試
1.測試證書測試
keytool -list -keystore .\server.keystore
2.啓動 Tomcat 並訪問 https://localhost:8443. 你將看到 Tomcat 默認的首頁。ui
須要注意的是,若是你訪問默認的 8080 端口,仍是有效的。加密
五.雙向認證
1. 生成證書及添加受信任的證書
-- 爲服務器生成證書 >keytool -genkey -dname "cn=programmer, ou=JavaSoft, o=Sun, c=US" -keyalg RSA -keysize 1024 -alias tomcat -keypass 123456 -keystore ./server.keystore -storepass 123456 -validity 3600 -- 單向時沒有這步 -- 爲客戶端生成證書 -- 雙擊.p12文件,按照提示安裝證書,將證書填入到「受信任的根證書頒發機構」 >keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore ./client.p12 -dname "cn=programmer, ou=JavaSoft, o=Sun, c=US" -- 單向時沒有這步 -- 必須把客戶端證書添加爲服務器的信任認證。因爲不能直接將PKCS12格式的證書庫導入,必須先把客戶端證書導出爲一個單獨的CER文件 >keytool -export -alias client -keystore ./client.p12 -storetype PKCS12 -storepass 123456 -rfc -file ./client.cer -- 單向時沒有這步 -- 將該文件導入到服務器的證書庫,添加爲一個信任證書 >keytool -import -v -file ./client.cer -keystore ./server.keystore -- 經過list命令查看服務器的證書庫,能夠看到兩個證書,一個是服務器證書,一個是受信任的客戶端證書 >keytool -list -keystore ./server.keystore -- 單向時沒有這步 -- 把服務器證書導出爲一個單獨的CER文件,使用以下命令 -- 雙擊.cer文件,按照提示安裝證書,將證書填入到「受信任的根證書頒發機構」 >keytool -keystore ./server.keystore -export -alias tomcat -file ./server.cer
2.配置Tomcat服務器
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="${catalina.base}\keystore\server.keystore" keystorePass="123456" truststoreFile="${catalina.base}\keystore\server.keystore" truststorePass="123456" />
clientAuth:true是指雙向驗證,單項時爲false
附件爲一個完成雙向認證配置的Tomcat,瀏覽器訪問須要安裝\keystore\client.p12
六.爲Java環境導入服務器公鑰(爲客戶端的JVM導入證書)
1.C:\Windows\System32\drivers\etc\hosts文件中映射一個虛擬域名,好比
127.0.0.1 sso.gqshao.com
2.生成keystore,導出證書,在導入到Java環境中,注意生成keystore時參數-dname中cn,須要是本機域名,能夠使用上面配的虛擬域名
-- 驗證是否存在同名證書 keytool -list -v -alias tomcat -keystore "%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS" -storepass 123456 -- 生成keystore keytool -genkey -dname "cn=sso.gqshao.com, ou=JavaSoft, o=Sun, c=US" -keyalg RSA -keysize 1024 -alias tomcat -keypass 123456 -keystore ./tomcat.keystore -storepass 123456 -validity 3600 -- 導出證書 keytool -export -file ./tomcat.crt -alias tomcat -keystore ./tomcat.keystore -- 爲客戶端的JVM導入證書 keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file tomcat.crt -alias tomcat -storepass 123456 -- 是否導入輸入 y -- 刪除JVM證書 keytool -delete -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -alias tomcat -storepass 123456